我有一个 bean,在配置类中设置。我的目标是转换、拒绝、应用通用标签并修改发送到 New Relic 的指标。
这是我的配置类
@Configuration
@Log4j2
public class MetricsConfig {
private static final Duration HISTOGRAM_EXPIRY = Duration.ofMinutes(10);
private static final Duration STEP = Duration.ofSeconds(5);
private final transient String profile;
@Autowired
public MetricsConfig(@Value("${spring.profiles.active}") final String profile) {
this.profile = profile;
}
@Bean
public MeterRegistryCustomizer<NewRelicMeterRegistry> metricsCommonTags() {
log.info("Configuring Registry");
return registry -> registry.config()
.commonTags(Arrays.asList(Tag.of("appId", "1111111"), Tag.of("environment", profile),
Tag.of("app", "aws-app-name")))
.meterFilter(new MeterFilter() {
@Override
public Meter.Id map(Meter.Id id) {
if(id.getName().startsWith("http")){
return id.withName("app-name." + profile + "." + id.getName());
}
return id;
}
@Override
public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
return config.merge(DistributionStatisticConfig.builder()
.percentilesHistogram(true)
.percentiles(0.5, 0.75, 0.95)
.expiry(HISTOGRAM_EXPIRY)
.bufferLength((int) (HISTOGRAM_EXPIRY.toMillis() / STEP.toMillis()))
.build());
}
}).meterFilter(MeterFilter.deny(id -> {
String uri = id.getTag("uri");
log.info("id: [{}]", id);
return (uri != null && uri.startsWith("/swagger") && uri.startsWith("/manage")) || !id.getName().toLowerCase().startsWith("app-name");
}))
;
}
}
然后,我还注入MeterRegistry
了一些类来捕获自定义事件(定时器、计数器)。
除了 New Relic 中的数据缺少 commonTags、转换和我在MetricsConfig
课堂上应用的任何其他内容外,一切都可以捕获事件。
在确保我的应用程序连接 MeterRegistryCustomizer
正确时,我是否遗漏了什么?