diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/PerformanceCounterInitializer.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/PerformanceCounterInitializer.java index ff488d94aad..79673393197 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/PerformanceCounterInitializer.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/PerformanceCounterInitializer.java @@ -31,6 +31,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -41,6 +43,8 @@ public class PerformanceCounterInitializer { private static final String METRIC_NAME_REGEXP = "[a-zA-Z0-9_.-/]+"; private static final String INVALID_CHARACTER_REGEXP = "[^a-zA-Z0-9_.-/]"; + private static final Set<String> invalidJmxMetrics = ConcurrentHashMap.newKeySet(); + public static void initialize(Configuration configuration) { PerformanceCounterContainer.INSTANCE.setCollectionFrequencyInSec( @@ -209,6 +213,13 @@ private static void calculateAndRecordValueForAttribute( value += Double.parseDouble(String.valueOf(obj)); } } catch (RuntimeException e) { + if (invalidJmxMetrics.add(jmxAttributeData.metricName)) { + try (MDC.MDCCloseable ignored = CUSTOM_JMX_METRIC_ERROR.makeActive()) { + logger.warn( + "{} JMX metric is invalid because only numeric and boolean JMX metric values are supported.", + jmxAttributeData.metricName); + } + } ok = false; break; }