Apply MeterRegistryCustomizer to composites
Update `MeterRegistryConfigurer` to also apply customizers to composite meter registries. Prior to this commit composites were skipped due to the incorrect assumption that did not contain their own state. Closes gh-12762
This commit is contained in:
parent
d49a1024bd
commit
1fce462944
|
@ -59,9 +59,6 @@ class MeterRegistryConfigurer {
|
|||
}
|
||||
|
||||
void configure(MeterRegistry registry) {
|
||||
if (registry instanceof CompositeMeterRegistry) {
|
||||
return;
|
||||
}
|
||||
// Customizers must be applied before binders, as they may add custom
|
||||
// tags or alter timer or summary configuration.
|
||||
customize(registry);
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed 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.springframework.boot.actuate.autoconfigure.metrics;
|
||||
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.atlas.AtlasMetricsExportAutoConfiguration;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
|
||||
public class MeterRegistryConfigurerIntegrationTests {
|
||||
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.with(MetricsRun.limitedTo(AtlasMetricsExportAutoConfiguration.class,
|
||||
PrometheusMetricsExportAutoConfiguration.class));
|
||||
|
||||
@Test
|
||||
public void binderMetricsAreSearchableFromTheComposite() {
|
||||
this.contextRunner
|
||||
.run((context) -> {
|
||||
CompositeMeterRegistry composite = context.getBean(CompositeMeterRegistry.class);
|
||||
composite.get("jvm.memory.used").gauge();
|
||||
|
||||
for (MeterRegistry registry : context.getBeansOfType(MeterRegistry.class).values()) {
|
||||
registry.get("jvm.memory.used").gauge();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
|
@ -35,7 +35,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.inOrder;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
|
||||
/**
|
||||
* Tests for {@link MeterRegistryConfigurer}.
|
||||
|
@ -73,13 +72,13 @@ public class MeterRegistryConfigurerTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void configureWhenCompositeShouldSkip() {
|
||||
this.binders.add(this.mockBinder);
|
||||
public void configureWhenCompositeShouldApplyCustomizer() {
|
||||
this.customizers.add(this.mockCustomizer);
|
||||
MeterRegistryConfigurer configurer = new MeterRegistryConfigurer(this.binders,
|
||||
this.filters, this.customizers, false);
|
||||
configurer.configure(new CompositeMeterRegistry());
|
||||
verifyZeroInteractions(this.mockBinder, this.mockCustomizer);
|
||||
CompositeMeterRegistry composite = new CompositeMeterRegistry();
|
||||
configurer.configure(composite);
|
||||
verify(this.mockCustomizer).customize(composite);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -16,10 +16,13 @@
|
|||
|
||||
package org.springframework.boot.actuate.autoconfigure.metrics;
|
||||
|
||||
import io.micrometer.atlas.AtlasMeterRegistry;
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.MeterRegistry.Config;
|
||||
import io.micrometer.prometheus.PrometheusMeterRegistry;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.atlas.AtlasMetricsExportAutoConfiguration;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
@ -36,7 +39,8 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
public class MeterRegistryCustomizerTests {
|
||||
|
||||
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.with(MetricsRun.simple());
|
||||
.with(MetricsRun.limitedTo(AtlasMetricsExportAutoConfiguration.class,
|
||||
PrometheusMetricsExportAutoConfiguration.class));
|
||||
|
||||
@Test
|
||||
public void commonTagsAreAppliedToAutoConfiguredBinders() {
|
||||
|
@ -44,8 +48,7 @@ public class MeterRegistryCustomizerTests {
|
|||
.withUserConfiguration(MeterRegistryCustomizerConfiguration.class)
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = context.getBean(MeterRegistry.class);
|
||||
assertThat(registry.get("jvm.memory.used").tags("region", "us-east-1")
|
||||
.gauge()).isNotNull();
|
||||
registry.get("jvm.memory.used").tags("region", "us-east-1").gauge();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -55,9 +58,21 @@ public class MeterRegistryCustomizerTests {
|
|||
.withUserConfiguration(MeterRegistryCustomizerConfiguration.class)
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = context.getBean(MeterRegistry.class);
|
||||
assertThat(
|
||||
registry.get("my.thing").tags("region", "us-east-1").gauge())
|
||||
.isNotNull();
|
||||
registry.get("my.thing").tags("region", "us-east-1").gauge();
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customizersCanBeAppliedToSpecificRegistryTypes() {
|
||||
this.contextRunner
|
||||
.withUserConfiguration(MeterRegistryCustomizerConfiguration.class)
|
||||
.run((context) -> {
|
||||
MeterRegistry prometheus = context.getBean(PrometheusMeterRegistry.class);
|
||||
prometheus.get("jvm.memory.used").tags("job", "myjob").gauge();
|
||||
|
||||
MeterRegistry atlas = context.getBean(AtlasMeterRegistry.class);
|
||||
assertThat(atlas.find("jvm.memory.used").tags("job", "myjob")
|
||||
.gauge()).isNull();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -66,10 +81,12 @@ public class MeterRegistryCustomizerTests {
|
|||
|
||||
@Bean
|
||||
public MeterRegistryCustomizer<MeterRegistry> commonTags() {
|
||||
return (registry) -> {
|
||||
Config config = registry.config();
|
||||
config.commonTags("region", "us-east-1");
|
||||
};
|
||||
return (registry) -> registry.config().commonTags("region", "us-east-1");
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MeterRegistryCustomizer<PrometheusMeterRegistry> prometehusOnlyCommonTags() {
|
||||
return (registry) -> registry.config().commonTags("job", "myjob");
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
|
Loading…
Reference in New Issue