diff --git a/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc b/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc index 35ff3c6cfe07..4188fdebe512 100644 --- a/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc +++ b/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc @@ -111,6 +111,14 @@ Set whether to enable the MicrometerExchangeEventNotifier for capturing metrics | `boolean` | `true` +|icon:lock[title=Fixed at build time] [[quarkus.camel.metrics.base-endpoint-uri-exchange-event-notifier]]`link:#quarkus.camel.metrics.base-endpoint-uri-exchange-event-notifier[quarkus.camel.metrics.base-endpoint-uri-exchange-event-notifier]` + +Whether to use static or dynamic values for Endpoint Name tags in captured metrics. By default, static values are +used. When using dynamic tags, then a dynamic to (toD) can compute many different endpoint URIs that, +can lead to many tags as the URI is dynamic, so use this with care if setting this option to false. +| `boolean` +| `true` + |icon:lock[title=Fixed at build time] [[quarkus.camel.metrics.enable-route-event-notifier]]`link:#quarkus.camel.metrics.enable-route-event-notifier[quarkus.camel.metrics.enable-route-event-notifier]` Set whether to enable the MicrometerRouteEventNotifier for capturing metrics on the total number of routes and total diff --git a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerBaseEndpointUriExchangeEventNotifierDisableTest.java b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerBaseEndpointUriExchangeEventNotifierDisableTest.java new file mode 100644 index 000000000000..41a34085df6a --- /dev/null +++ b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerBaseEndpointUriExchangeEventNotifierDisableTest.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.quarkus.component.micrometer.deployment; + +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Optional; +import java.util.Properties; + +import io.quarkus.test.QuarkusUnitTest; +import jakarta.inject.Inject; +import org.apache.camel.CamelContext; +import org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier; +import org.apache.camel.spi.EventNotifier; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.Asset; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class MicrometerBaseEndpointUriExchangeEventNotifierDisableTest { + @RegisterExtension + static final QuarkusUnitTest CONFIG = new QuarkusUnitTest() + .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class) + .addAsResource(applicationProperties(), "application.properties")); + + @Inject + CamelContext context; + + @Test + public void testBaseEndpointURIDisabled() { + Optional optionalExchangeEventNotifier = context.getManagementStrategy() + .getEventNotifiers() + .stream() + .filter(eventNotifier -> eventNotifier.getClass().equals(MicrometerExchangeEventNotifier.class)) + .findFirst(); + assertTrue(optionalExchangeEventNotifier.isPresent()); + + MicrometerExchangeEventNotifier eventNotifier = (MicrometerExchangeEventNotifier) optionalExchangeEventNotifier.get(); + assertFalse(eventNotifier.isBaseEndpointURI()); + } + + public static Asset applicationProperties() { + Writer writer = new StringWriter(); + + Properties props = new Properties(); + props.setProperty("quarkus.camel.metrics.base-endpoint-uri-exchange-event-notifier", "false"); + + try { + props.store(writer, ""); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return new StringAsset(writer.toString()); + } +} diff --git a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsNamingPolicyLegacyTest.java b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsNamingPolicyLegacyTest.java index bab63673347e..a080f32ef638 100644 --- a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsNamingPolicyLegacyTest.java +++ b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerMetricsNamingPolicyLegacyTest.java @@ -27,7 +27,7 @@ import jakarta.inject.Inject; import org.apache.camel.CamelContext; import org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier; -import org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategy; +import org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategyLegacy; import org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifier; import org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifierNamingStrategy; import org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryFactory; @@ -93,7 +93,7 @@ void legacyNamingPolicy() { MicrometerExchangeEventNotifier micrometerExchangeEventNotifier = (MicrometerExchangeEventNotifier) optionalExchangeEventNotifier .get(); - assertEquals(MicrometerExchangeEventNotifierNamingStrategy.LEGACY, + assertInstanceOf(MicrometerExchangeEventNotifierNamingStrategyLegacy.class, micrometerExchangeEventNotifier.getNamingStrategy()); Optional optionalRouteEventNotifier = context.getManagementStrategy() diff --git a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerConfig.java b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerConfig.java index 94d9db32240c..c897c09301e5 100644 --- a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerConfig.java +++ b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerConfig.java @@ -52,6 +52,16 @@ public interface CamelMicrometerConfig { @WithDefault("true") boolean enableExchangeEventNotifier(); + /** + * Whether to use static or dynamic values for Endpoint Name tags in captured metrics. By default, static values are + * used. When using dynamic tags, then a dynamic to (toD) can compute many different endpoint URIs that, + * can lead to many tags as the URI is dynamic, so use this with care if setting this option to false. + * + * @asciidoclet + */ + @WithDefault("true") + public boolean baseEndpointURIExchangeEventNotifier(); + /** * Set whether to enable the MicrometerRouteEventNotifier for capturing metrics on the total number of routes and total * number of routes running. diff --git a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java index d1449bc9e165..82ee4f6efc1e 100644 --- a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java +++ b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java @@ -23,7 +23,8 @@ import org.apache.camel.CamelContext; import org.apache.camel.component.micrometer.MicrometerUtils; import org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier; -import org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategy; +import org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategyDefault; +import org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifierNamingStrategyLegacy; import org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifier; import org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifierNamingStrategy; import org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryFactory; @@ -92,8 +93,16 @@ public void configure(CamelContext camelContext) { ManagementStrategy managementStrategy = camelContext.getManagementStrategy(); if (config.enableExchangeEventNotifier()) { MicrometerExchangeEventNotifier eventNotifier = new MicrometerExchangeEventNotifier(); + eventNotifier.setBaseEndpointURI(config.baseEndpointURIExchangeEventNotifier()); + if (config.namingStrategy().equals(MetricsNamingStrategy.LEGACY)) { - eventNotifier.setNamingStrategy(MicrometerExchangeEventNotifierNamingStrategy.LEGACY); + eventNotifier.setNamingStrategy( + new MicrometerExchangeEventNotifierNamingStrategyLegacy( + config.baseEndpointURIExchangeEventNotifier())); + } else { + eventNotifier.setNamingStrategy( + new MicrometerExchangeEventNotifierNamingStrategyDefault( + config.baseEndpointURIExchangeEventNotifier())); } managementStrategy.addEventNotifier(eventNotifier); }