This is an automated email from the ASF dual-hosted git repository.

Croway pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git


The following commit(s) were added to refs/heads/main by this push:
     new 77cd7c34132 CAMEL-24505: camel-micrometer-starter - bound the uri 
metric tag
77cd7c34132 is described below

commit 77cd7c341326148423ecd0ed31c64c08a6887ac7
Author: croway <[email protected]>
AuthorDate: Wed Sep 2 15:01:40 2026 +0200

    CAMEL-24505: camel-micrometer-starter - bound the uri metric tag
    
    The uri low cardinality tag of the http.server.requests metrics was set to
    request.getServletPath() + getPathInfo() whenever the request did not 
resolve
    to a Camel HTTP consumer. Micrometer registers a meter per distinct tag 
value
    and keeps it for the lifetime of the process, so the meters followed the 
number
    of distinct paths that clients requested, instead of the number of routes, 
and
    the memory they use grows with the traffic a deployment receives.
    
    Requests that do not resolve to a Camel consumer now keep the uri computed 
by
    Spring's own DefaultServerRequestObservationConvention: the mapped pattern 
for
    a Spring MVC endpoint, and a constant (UNKNOWN, NOT_FOUND, REDIRECTION)
    otherwise. That is also what the uriTagEnabled javadoc already documents, 
that
    an unresolved request "will be marked as UNKNOWN". Requests that do resolve 
to
    a Camel consumer are unchanged and keep the static consumer path.
    
    With uriTagDynamic the requested path is still used, as that is the 
documented
    purpose of the option, but only for requests that resolve to a Camel 
consumer,
    and the value is capped and stripped of control characters.
    
    The auto-configuration was also conditional on camel.metrics.uriTagEnabled, 
a
    spelling that Spring Boot cannot resolve from a relaxed binding source, so 
the
    camel.metrics.uri-tag-enabled property listed in the starter documentation
    never enabled the uri tag. The condition now uses the kebab-case name, and 
both
    spellings work.
    
    Co-Authored-By: Claude Opus 5 <[email protected]>
---
 .../camel-micrometer-starter/pom.xml               | 11 +++
 .../src/main/docs/micrometer.json                  |  2 +-
 .../MicrometerTagsAutoConfiguration.java           | 90 +++++++++++++++------
 .../metrics/CamelMetricsConfiguration.java         |  3 +-
 .../springboot/MicrometerUriTagDynamicTest.java    | 92 +++++++++++++++++++++
 .../springboot/MicrometerUriTagTest.java           | 76 ++++++++++++++++++
 .../springboot/MicrometerUriTagTestSupport.java    | 93 ++++++++++++++++++++++
 .../modules/ROOT/pages/starters/micrometer.adoc    |  2 +-
 8 files changed, 342 insertions(+), 27 deletions(-)

diff --git a/components-starter/camel-micrometer-starter/pom.xml 
b/components-starter/camel-micrometer-starter/pom.xml
index 2f3880a9791..86f042fffdb 100644
--- a/components-starter/camel-micrometer-starter/pom.xml
+++ b/components-starter/camel-micrometer-starter/pom.xml
@@ -54,6 +54,17 @@
       <artifactId>camel-http-common</artifactId>
       <version>${camel-version}</version>
     </dependency>
+    <!-- Testing dependencies -->
+    <dependency>
+      <groupId>org.apache.camel.springboot</groupId>
+      <artifactId>camel-servlet-starter</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.awaitility</groupId>
+      <artifactId>awaitility</artifactId>
+      <scope>test</scope>
+    </dependency>
     <!--START OF GENERATED CODE-->
     <dependency>
       <groupId>org.apache.camel.springboot</groupId>
diff --git 
a/components-starter/camel-micrometer-starter/src/main/docs/micrometer.json 
b/components-starter/camel-micrometer-starter/src/main/docs/micrometer.json
index f2ffa87891d..f6073d988e5 100644
--- a/components-starter/camel-micrometer-starter/src/main/docs/micrometer.json
+++ b/components-starter/camel-micrometer-starter/src/main/docs/micrometer.json
@@ -133,7 +133,7 @@
     {
       "name": "camel.metrics.uri-tag-dynamic",
       "type": "java.lang.Boolean",
-      "description": "Whether to use static or dynamic values for HTTP uri 
tags in captured metrics. When using dynamic tags, then a REST service with 
base URL: \/users\/{id} will capture metrics with uri tag with the actual 
dynamic value such as: \/users\/123. However, this can lead to many tags as the 
URI is dynamic, so use this with care.",
+      "description": "Whether to use static or dynamic values for HTTP uri 
tags in captured metrics. When using dynamic tags, then a REST service with 
base URL: \/users\/{id} will capture metrics with uri tag with the actual 
dynamic value such as: \/users\/123. However, this can lead to many tags as the 
URI is dynamic, so use this with care. The dynamic value is only used for 
requests that are resolved to a Camel HTTP consumer, any other request is 
tagged by the default Spring convention.",
       "sourceType": 
"org.apache.camel.component.micrometer.springboot.metrics.CamelMetricsConfiguration",
       "defaultValue": false
     },
diff --git 
a/components-starter/camel-micrometer-starter/src/main/java/org/apache/camel/component/micrometer/springboot/MicrometerTagsAutoConfiguration.java
 
b/components-starter/camel-micrometer-starter/src/main/java/org/apache/camel/component/micrometer/springboot/MicrometerTagsAutoConfiguration.java
index ecb5f3ac529..8ffa746bdc7 100644
--- 
a/components-starter/camel-micrometer-starter/src/main/java/org/apache/camel/component/micrometer/springboot/MicrometerTagsAutoConfiguration.java
+++ 
b/components-starter/camel-micrometer-starter/src/main/java/org/apache/camel/component/micrometer/springboot/MicrometerTagsAutoConfiguration.java
@@ -36,9 +36,19 @@ import java.util.Optional;
 
 @AutoConfiguration(after = CamelAutoConfiguration.class)
 @Conditional({ ConditionalOnCamelContextAndAutoConfigurationBeans.class })
-@ConditionalOnProperty(prefix = "camel.metrics", name = "uriTagEnabled", 
havingValue = "true")
+@ConditionalOnProperty(prefix = "camel.metrics", name = "uri-tag-enabled", 
havingValue = "true")
 public class MicrometerTagsAutoConfiguration {
 
+    /**
+     * Name of the low cardinality key holding the http uri.
+     */
+    private static final String URI = "uri";
+
+    /**
+     * Maximum length of the uri tag value when using dynamic uri tags, to 
keep the tag value bounded.
+     */
+    private static final int MAX_URI_LENGTH = 200;
+
     /**
      * To integrate with micrometer to include expanded uri in tags when for 
example using camel rest-dsl with servlet.
      */
@@ -50,39 +60,71 @@ public class MicrometerTagsAutoConfiguration {
             @Override
             public KeyValues 
getLowCardinalityKeyValues(ServerRequestObservationContext context) {
                 // here, we just want to have an additional KeyValue to the 
observation, keeping the default values
-                return 
super.getLowCardinalityKeyValues(context).and(custom(context));
+                KeyValue uri = custom(context);
+                KeyValues answer = super.getLowCardinalityKeyValues(context);
+                // when the request is not for a camel consumer, then we keep 
the uri computed by the default
+                // spring convention (the mapped pattern, or a constant such 
as UNKNOWN or NOT_FOUND), instead of
+                // the requested path, which would add a new meter for every 
distinct path being requested
+                return uri != null ? answer.and(uri) : answer;
             }
 
             protected KeyValue custom(ServerRequestObservationContext context) 
{
                 HttpServletRequest request = context.getCarrier();
-                String uri = null;
-                if (servlet.isPresent() && !configuration.isUriTagDynamic()) {
-                    HttpConsumer consumer = 
servlet.get().getServletResolveConsumerStrategy().resolve(request,
-                            servlet.get().getConsumers());
-                    if (consumer != null) {
-                        uri = consumer.getPath();
-                    }
+                if (request == null || servlet.isEmpty()) {
+                    return null;
+                }
+                HttpConsumer consumer = 
servlet.get().getServletResolveConsumerStrategy().resolve(request,
+                        servlet.get().getConsumers());
+                if (consumer == null) {
+                    // the request is not for a camel consumer, so let the 
default spring convention resolve the uri
+                    return null;
                 }
 
-                // the request may not be for camel servlet, so we need to 
capture uri from request
-                if (uri == null || uri.isEmpty()) {
-                    // dynamic uri with the actual value from the http request
-                    uri = request.getServletPath();
-                    if (uri == null || uri.isEmpty()) {
-                        uri = request.getPathInfo();
-                    } else {
-                        String p = request.getPathInfo();
-                        if (p != null) {
-                            uri = uri + p;
-                        }
-                    }
+                String uri;
+                if (configuration.isUriTagDynamic()) {
+                    // dynamic uri with the actual value from the http 
request, this is opt-in as the uri is dynamic
+                    // and therefore leads to a tag value per distinct request 
path
+                    uri = dynamicUri(request);
+                } else {
+                    // the static path of the camel consumer, such as 
/users/{id}
+                    uri = consumer.getPath();
                 }
-                if (uri == null) {
-                    uri = "";
+                if (uri == null || uri.isEmpty()) {
+                    return null;
                 }
 
-                return KeyValue.of("uri", uri);
+                return KeyValue.of(URI, uri);
             }
         };
     }
+
+    /**
+     * The uri from the http request, as requested by the client.
+     */
+    private static String dynamicUri(HttpServletRequest request) {
+        StringBuilder sb = new StringBuilder();
+        String path = request.getServletPath();
+        if (path != null) {
+            sb.append(path);
+        }
+        String info = request.getPathInfo();
+        if (info != null) {
+            sb.append(info);
+        }
+        return sanitize(sb.toString());
+    }
+
+    /**
+     * The dynamic uri is client provided, so keep the tag value bounded in 
length and free of control characters that
+     * the monitoring system may not be able to render.
+     */
+    private static String sanitize(String uri) {
+        String answer = uri.length() > MAX_URI_LENGTH ? uri.substring(0, 
MAX_URI_LENGTH) : uri;
+        StringBuilder sb = new StringBuilder(answer.length());
+        for (int i = 0; i < answer.length(); i++) {
+            char ch = answer.charAt(i);
+            sb.append(Character.isISOControl(ch) ? '_' : ch);
+        }
+        return sb.toString();
+    }
 }
diff --git 
a/components-starter/camel-micrometer-starter/src/main/java/org/apache/camel/component/micrometer/springboot/metrics/CamelMetricsConfiguration.java
 
b/components-starter/camel-micrometer-starter/src/main/java/org/apache/camel/component/micrometer/springboot/metrics/CamelMetricsConfiguration.java
index 787adee4876..888edd5601e 100644
--- 
a/components-starter/camel-micrometer-starter/src/main/java/org/apache/camel/component/micrometer/springboot/metrics/CamelMetricsConfiguration.java
+++ 
b/components-starter/camel-micrometer-starter/src/main/java/org/apache/camel/component/micrometer/springboot/metrics/CamelMetricsConfiguration.java
@@ -32,7 +32,8 @@ public class CamelMetricsConfiguration {
      *
      * When using dynamic tags, then a REST service with base URL: /users/{id} 
will capture metrics with uri tag with
      * the actual dynamic value such as: /users/123. However, this can lead to 
many tags as the URI is dynamic, so use
-     * this with care.
+     * this with care. The dynamic value is only used for requests that are 
resolved to a Camel HTTP consumer, any
+     * other request is tagged by the default Spring convention.
      */
     private boolean uriTagDynamic;
 
diff --git 
a/components-starter/camel-micrometer-starter/src/test/java/org/apache/camel/component/micrometer/springboot/MicrometerUriTagDynamicTest.java
 
b/components-starter/camel-micrometer-starter/src/test/java/org/apache/camel/component/micrometer/springboot/MicrometerUriTagDynamicTest.java
new file mode 100644
index 00000000000..2b346bfa449
--- /dev/null
+++ 
b/components-starter/camel-micrometer-starter/src/test/java/org/apache/camel/component/micrometer/springboot/MicrometerUriTagDynamicTest.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.micrometer.springboot;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.test.spring.junit6.CamelSpringBootTest;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
+
+import static org.awaitility.Awaitility.await;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * With dynamic uri tags, the requested path is used as uri tag, but only for 
requests that are resolved to a Camel
+ * consumer, and the tag value is kept bounded in length.
+ */
+@DirtiesContext
+@CamelSpringBootTest
+@EnableAutoConfiguration
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+                classes = { CamelAutoConfiguration.class, 
MicrometerUriTagTestSupport.TestConfiguration.class },
+                // the legacy camelCase spelling of the properties must keep 
working as well
+                properties = { "camel.metrics.uriTagEnabled=true", 
"camel.metrics.uriTagDynamic=true" })
+public class MicrometerUriTagDynamicTest extends MicrometerUriTagTestSupport {
+
+    private static final int REQUESTS = 10;
+    private static final int MAX_URI_LENGTH = 200;
+
+    @Order(1)
+    @Test
+    void unmatchedRequestsShareASingleMeter() throws Exception {
+        for (int i = 0; i < REQUESTS; i++) {
+            assertEquals(404, get("/camel/no-such-path-" + i));
+        }
+
+        await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
+            Map<String, Long> tags = uriTags();
+            assertEquals(1, tags.size(), "Expected a single uri tag value but 
got " + tags);
+            assertEquals(REQUESTS, tags.values().iterator().next());
+            assertFalse(tags.keySet().stream().anyMatch(uri -> 
uri.contains("no-such-path")),
+                    "The requested path must not be used as uri tag but got " 
+ tags);
+        });
+    }
+
+    @Order(2)
+    @Test
+    void matchedRequestsUseTheRequestedPath() throws Exception {
+        assertEquals(200, get("/camel/users/123"));
+
+        await().atMost(10, TimeUnit.SECONDS)
+                .untilAsserted(() -> assertEquals(1, 
count("/camel/users/123"), "Got uri tags " + uriTags()));
+    }
+
+    @Order(3)
+    @Test
+    void longRequestedPathIsCapped() throws Exception {
+        assertEquals(200, get("/camel/users/" + "a".repeat(300)));
+
+        await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
+            Map<String, Long> tags = uriTags();
+            assertTrue(tags.keySet().stream().anyMatch(uri -> uri.length() == 
MAX_URI_LENGTH
+                    && uri.startsWith("/camel/users/aaa")), "Expected a capped 
uri tag value but got " + tags);
+            assertFalse(tags.keySet().stream().anyMatch(uri -> uri.length() > 
MAX_URI_LENGTH),
+                    "No uri tag value must be longer than " + MAX_URI_LENGTH + 
" but got " + tags);
+        });
+    }
+}
diff --git 
a/components-starter/camel-micrometer-starter/src/test/java/org/apache/camel/component/micrometer/springboot/MicrometerUriTagTest.java
 
b/components-starter/camel-micrometer-starter/src/test/java/org/apache/camel/component/micrometer/springboot/MicrometerUriTagTest.java
new file mode 100644
index 00000000000..a87ad86dd5a
--- /dev/null
+++ 
b/components-starter/camel-micrometer-starter/src/test/java/org/apache/camel/component/micrometer/springboot/MicrometerUriTagTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.micrometer.springboot;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.test.spring.junit6.CamelSpringBootTest;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
+
+import static org.awaitility.Awaitility.await;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+/**
+ * The uri tag must be the static path of the Camel consumer, and requests 
that are not for a Camel consumer must not
+ * add a meter per requested path.
+ */
+@DirtiesContext
+@CamelSpringBootTest
+@EnableAutoConfiguration
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+                classes = { CamelAutoConfiguration.class, 
MicrometerUriTagTestSupport.TestConfiguration.class },
+                properties = { "camel.metrics.uri-tag-enabled=true" })
+public class MicrometerUriTagTest extends MicrometerUriTagTestSupport {
+
+    private static final int REQUESTS = 10;
+
+    @Order(1)
+    @Test
+    void unmatchedRequestsShareASingleMeter() throws Exception {
+        for (int i = 0; i < REQUESTS; i++) {
+            assertEquals(404, get("/camel/no-such-path-" + i));
+        }
+
+        await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
+            Map<String, Long> tags = uriTags();
+            assertEquals(1, tags.size(), "Expected a single uri tag value but 
got " + tags);
+            assertEquals(REQUESTS, tags.values().iterator().next());
+            assertFalse(tags.keySet().stream().anyMatch(uri -> 
uri.contains("no-such-path")),
+                    "The requested path must not be used as uri tag but got " 
+ tags);
+        });
+    }
+
+    @Order(2)
+    @Test
+    void matchedRequestsUseTheConsumerPath() throws Exception {
+        assertEquals(200, get("/camel/users/123"));
+        assertEquals(200, get("/camel/users/456"));
+
+        await().atMost(10, TimeUnit.SECONDS)
+                .untilAsserted(() -> assertEquals(2, count("/users/{id}"), 
"Got uri tags " + uriTags()));
+    }
+}
diff --git 
a/components-starter/camel-micrometer-starter/src/test/java/org/apache/camel/component/micrometer/springboot/MicrometerUriTagTestSupport.java
 
b/components-starter/camel-micrometer-starter/src/test/java/org/apache/camel/component/micrometer/springboot/MicrometerUriTagTestSupport.java
new file mode 100644
index 00000000000..7768916f6bc
--- /dev/null
+++ 
b/components-starter/camel-micrometer-starter/src/test/java/org/apache/camel/component/micrometer/springboot/MicrometerUriTagTestSupport.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.micrometer.springboot;
+
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import io.micrometer.core.instrument.MeterRegistry;
+import io.micrometer.core.instrument.Timer;
+import org.apache.camel.builder.RouteBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+
+/**
+ * Base class for the tests capturing the uri tag of the {@code 
http.server.requests} meters.
+ */
+public abstract class MicrometerUriTagTestSupport {
+
+    protected static final String HTTP_SERVER_REQUESTS = 
"http.server.requests";
+    protected static final String URI_TAG = "uri";
+
+    @Autowired
+    protected Environment env;
+
+    @Autowired
+    protected MeterRegistry meterRegistry;
+
+    /**
+     * Performs a HTTP GET on the given path, and returns the http status code.
+     */
+    protected int get(String path) throws Exception {
+        HttpClient client = HttpClient.newHttpClient();
+        HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create("http://localhost:"; + 
env.getRequiredProperty("local.server.port") + path))
+                .GET()
+                .build();
+        return client.send(request, 
HttpResponse.BodyHandlers.ofString()).statusCode();
+    }
+
+    /**
+     * The uri tag values of the captured http server request meters, and how 
many requests each of them counted.
+     */
+    protected Map<String, Long> uriTags() {
+        Map<String, Long> answer = new LinkedHashMap<>();
+        for (Timer timer : meterRegistry.find(HTTP_SERVER_REQUESTS).timers()) {
+            answer.merge(timer.getId().getTag(URI_TAG), timer.count(), 
Long::sum);
+        }
+        return answer;
+    }
+
+    /**
+     * Number of requests counted for the given uri tag value.
+     */
+    protected long count(String uri) {
+        Timer timer = meterRegistry.find(HTTP_SERVER_REQUESTS).tag(URI_TAG, 
uri).timer();
+        return timer != null ? timer.count() : 0;
+    }
+
+    @Configuration
+    public static class TestConfiguration {
+
+        @Bean
+        public RouteBuilder routeBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() {
+                    from("servlet:/users/{id}")
+                            .setBody().constant("Hello");
+                }
+            };
+        }
+    }
+}
diff --git a/docs/spring-boot/modules/ROOT/pages/starters/micrometer.adoc 
b/docs/spring-boot/modules/ROOT/pages/starters/micrometer.adoc
index 2f252165459..54d74e42a2e 100644
--- a/docs/spring-boot/modules/ROOT/pages/starters/micrometer.adoc
+++ b/docs/spring-boot/modules/ROOT/pages/starters/micrometer.adoc
@@ -44,6 +44,6 @@ The starter supports 18 options, which are listed below.
 | camel.metrics.naming-strategy | Controls the name style to use for metrics. 
Default = uses micrometer naming convention. Legacy = uses the classic naming 
style (camelCase) | default | String
 | camel.metrics.route-policy-exclude-pattern | Pattern to exclude routes (by 
id) to capture. Multiple route ids can be separated by comma. |  | String
 | camel.metrics.route-policy-level | Sets the level of information to capture. 
Possible values are all,route,context. all = both context and routes. route = 
routes only. context = camel context only. | all | String
-| camel.metrics.uri-tag-dynamic | Whether to use static or dynamic values for 
HTTP uri tags in captured metrics. When using dynamic tags, then a REST service 
with base URL: /users/\{id} will capture metrics with uri tag with the actual 
dynamic value such as: /users/123. However, this can lead to many tags as the 
URI is dynamic, so use this with care. | false | Boolean
+| camel.metrics.uri-tag-dynamic | Whether to use static or dynamic values for 
HTTP uri tags in captured metrics. When using dynamic tags, then a REST service 
with base URL: /users/\{id} will capture metrics with uri tag with the actual 
dynamic value such as: /users/123. However, this can lead to many tags as the 
URI is dynamic, so use this with care. The dynamic value is only used for 
requests that are resolved to a Camel HTTP consumer, any other request is 
tagged by the default Spring c [...]
 | camel.metrics.uri-tag-enabled | Whether HTTP uri tags should be enabled or 
not in captured metrics. If disabled then the uri tag, is likely not able to be 
resolved and will be marked as UNKNOWN. | true | Boolean
 |===

Reply via email to