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)