diff --git a/collector/src/main/java/io/prometheus/jmx/ObjectNameAttributeFilter.java b/collector/src/main/java/io/prometheus/jmx/ObjectNameAttributeFilter.java index dc6f311a..85fec1e0 100644 --- a/collector/src/main/java/io/prometheus/jmx/ObjectNameAttributeFilter.java +++ b/collector/src/main/java/io/prometheus/jmx/ObjectNameAttributeFilter.java @@ -129,10 +129,23 @@ public void add(ObjectName objectName, String attributeName) { public boolean exclude(ObjectName objectName, String attributeName) { boolean result = false; + // concrete objectName definition gets precedence if (excludeObjectNameAttributesMap.size() > 0) { Set attributeNameSet = excludeObjectNameAttributesMap.get(objectName); if (attributeNameSet != null) { - result = attributeNameSet.contains(attributeName); + return attributeNameSet.contains(attributeName); + } + } + for (Map.Entry> objectNameSetEntry : + excludeObjectNameAttributesMap.entrySet()) { + if (objectNameSetEntry.getKey().isPattern() + && objectNameSetEntry.getKey().apply(objectName)) { + // if exclusion found - return + // otherwise keep searching as checked object may match multiple patterns + // and checked attribute may be defined only under one of them + if (objectNameSetEntry.getValue().contains(attributeName)) { + return true; + } } }