Skip to content

Commit c609815

Browse files
authored
Enabling disabled_metrics config for Micrometer (#1421)
1 parent 883b656 commit c609815

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

CHANGELOG.asciidoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ endif::[]
3838
metricset tag keys - {pull}1413[1413]
3939
* Fix invalid micrometer metrics with non-numeric values {pull}1419[1419]
4040
* Fix `NoClassDefFoundError` with JDBC instrumentation plugin {pull}1409[1409]
41+
* Apply `disable_metrics` config to Micrometer metrics - {pull}1421[1421]
4142
4243
[[release-notes-1.x]]
4344
=== Java Agent version 1.x

apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMetricsReporter.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import co.elastic.apm.agent.impl.ElasticApmTracer;
2828
import co.elastic.apm.agent.impl.Tracer;
29+
import co.elastic.apm.agent.matcher.WildcardMatcher;
2930
import co.elastic.apm.agent.report.Reporter;
3031
import co.elastic.apm.agent.report.ReporterConfiguration;
3132
import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier;
@@ -37,6 +38,7 @@
3738
import org.slf4j.LoggerFactory;
3839

3940
import java.util.HashMap;
41+
import java.util.List;
4042
import java.util.Map;
4143
import java.util.concurrent.TimeUnit;
4244
import java.util.function.Consumer;
@@ -88,7 +90,7 @@ public void run() {
8890
return;
8991
}
9092
final long timestamp = System.currentTimeMillis() * 1000;
91-
MeterMapConsumer meterConsumer = new MeterMapConsumer();
93+
MeterMapConsumer meterConsumer = new MeterMapConsumer(tracer.getConfig(ReporterConfiguration.class).getDisableMetrics());
9294
for (MeterRegistry registry : meterRegistries) {
9395
registry.forEachMeter(meterConsumer);
9496
}
@@ -97,11 +99,21 @@ public void run() {
9799
}
98100

99101
private static class MeterMapConsumer implements Consumer<Meter> {
102+
103+
private final List<WildcardMatcher> disabledMetrics;
104+
105+
public MeterMapConsumer(List<WildcardMatcher> disabledMetrics) {
106+
this.disabledMetrics = disabledMetrics;
107+
}
108+
100109
final Map<Meter.Id, Meter> meters = new HashMap<>();
101110

102111
@Override
103112
public void accept(Meter meter) {
104-
meters.put(meter.getId(), meter);
113+
Meter.Id meterId = meter.getId();
114+
if (WildcardMatcher.isNoneMatch(disabledMetrics, meterId.getName())) {
115+
meters.put(meterId, meter);
116+
}
105117
}
106118
}
107119

apm-agent-plugins/apm-micrometer-plugin/src/test/java/co/elastic/apm/agent/micrometer/MicrometerMetricsReporterTest.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import co.elastic.apm.agent.MockReporter;
2828
import co.elastic.apm.agent.MockTracer;
2929
import co.elastic.apm.agent.impl.ElasticApmTracer;
30+
import co.elastic.apm.agent.matcher.WildcardMatcher;
3031
import co.elastic.apm.agent.report.ReporterConfiguration;
3132
import com.fasterxml.jackson.core.JsonProcessingException;
3233
import com.fasterxml.jackson.databind.JsonNode;
@@ -64,14 +65,15 @@ class MicrometerMetricsReporterTest {
6465
private MicrometerMetricsReporter metricsReporter;
6566
private MockReporter reporter;
6667
private ObjectMapper objectMapper = new ObjectMapper();
68+
private ElasticApmTracer tracer;
6769

6870
@BeforeEach
6971
void setUp() {
7072
SimpleMeterRegistry simpleMeterRegistry = new SimpleMeterRegistry();
7173
CompositeMeterRegistry nestedCompositeMeterRegistry = new CompositeMeterRegistry(Clock.SYSTEM, List.of(simpleMeterRegistry));
7274
meterRegistry = new CompositeMeterRegistry(Clock.SYSTEM, List.of(nestedCompositeMeterRegistry));
7375
reporter = new MockReporter();
74-
ElasticApmTracer tracer = MockTracer.createRealTracer(reporter);
76+
tracer = MockTracer.createRealTracer(reporter);
7577
doReturn(0L).when(tracer.getConfig(ReporterConfiguration.class)).getMetricsIntervalMs();
7678
metricsReporter = new MicrometerMetricsReporter(tracer);
7779
metricsReporter.registerMeterRegistry(meterRegistry);
@@ -93,6 +95,22 @@ void testSameMetricSet() {
9395
assertThat(metricSet.get("metricset").get("samples").get("gauge").get("value").doubleValue()).isEqualTo(42);
9496
}
9597

98+
@Test
99+
void testDisabledMetrics() {
100+
doReturn(List.of(WildcardMatcher.valueOf("root.metric"), WildcardMatcher.valueOf("root.metric.exclude.*")))
101+
.when(tracer.getConfig(ReporterConfiguration.class)).getDisableMetrics();
102+
103+
List<Tag> tags = List.of(Tag.of("foo", "bar"));
104+
meterRegistry.counter("root.metric", tags).increment(42);
105+
meterRegistry.counter("root.metric.include", tags).increment(42);
106+
meterRegistry.counter("root.metric.exclude.counter", tags).increment(42);
107+
108+
JsonNode metricSet = getSingleMetricSet();
109+
assertThat(metricSet.get("metricset").get("tags").get("foo").textValue()).isEqualTo("bar");
110+
assertThat(metricSet.get("metricset").get("samples")).hasSize(1);
111+
assertThat(metricSet.get("metricset").get("samples").get("root.metric.include").get("value").doubleValue()).isEqualTo(42);
112+
}
113+
96114
@Test
97115
void testTagsSanitation() {
98116
List<Tag> tags = List.of(

0 commit comments

Comments
 (0)