Andrea Cosentino created CAMEL-24505:
----------------------------------------

             Summary: camel-micrometer-starter - uri metric tag falls back to 
the raw request path, giving unbounded tag cardinality
                 Key: CAMEL-24505
                 URL: https://issues.apache.org/jira/browse/CAMEL-24505
             Project: Camel
          Issue Type: Improvement
          Components: camel-spring-boot-starters, camel-micrometer
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino


{{MicrometerTagsAutoConfiguration.custom()}} builds the {{uri}} tag for the 
servlet observation:

{code:java}
if (servlet.isPresent() && !configuration.isUriTagDynamic()) {
    HttpConsumer consumer = 
servlet.get().getServletResolveConsumerStrategy().resolve(request, 
servlet.get().getConsumers());
    if (consumer != null) {
        uri = consumer.getPath();
    }
}

// the request may not be for camel servlet, so we need to capture uri from 
request
if (uri == null || uri.isEmpty()) {
    uri = request.getServletPath();
    if (uri == null || uri.isEmpty()) {
        uri = request.getPathInfo();
    } else {
        String p = request.getPathInfo();
        if (p != null) {
            uri = uri + p;
        }
    }
}
{code}

(MicrometerTagsAutoConfiguration:70)

When the request does not resolve to a Camel consumer - any 404, any request to 
a non-Camel path - the tag value becomes the request path verbatim. Micrometer 
creates one meter per distinct tag value and keeps them for the process 
lifetime, so the number of meters follows the number of distinct paths 
requested rather than the number of routes.

Spring's own convention for this case is a constant {{UNKNOWN}} tag, precisely 
because the value is client-supplied. Only the resolved consumer path template 
is a bounded, route-author-authored value.

*Proposal*

- Replace the raw {{servletPath}}/{{pathInfo}} fallback with a constant such as 
{{UNKNOWN}}.
- Keep the raw path only behind the existing {{uriTagDynamic}} opt-in, and 
normalise or cap it there.
- Add a test asserting that N requests to N distinct unmatched paths produce 
one meter, not N.

----
_This issue was drafted by Claude Code on behalf of Andrea Cosentino._



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to