我正在尝试弄清楚如何为特定的指标设置通用标签。注意:我使用的是Cloudwatch监控系统。这就是我所拥有的:
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return new MeterRegistryCustomizer<MeterRegistry>() {
@Override
public void customize(MeterRegistry registry) {
registry.config()
.meterFilter(MeterFilter.denyNameStartsWith("jvm.gc.pause"))
.meterFilter(MeterFilter.denyNameStartsWith("logback"))
.meterFilter(MeterFilter.denyNameStartsWith("process"))
.meterFilter(MeterFilter.denyNameStartsWith("system.cpu"))
.meterFilter(MeterFilter.denyNameStartsWith("jvm.buffer"))
.meterFilter(MeterFilter.denyNameStartsWith("jvm.classes")
.commonTags(Arrays.asList(Tag.of("instanceId", instanceId)));
}
};
}
我正在考虑一个类似于MeterFilter.allow("metric.name").tags("tag1","tag2")
的MeterFilter方法
Micrometer确实允许我在创建Meter时设置标签,但是这对启用Spring的Meter没有帮助。
唯一的方法似乎是创建两个MeterRegistryCustomizer对象,一个用于Spring指标和我创建的任何需要通用标记的自定义指标,另一个用于那些不需要的指标。
有没有办法完成我错过的这件事?
发布于 2018-12-27 00:14:51
如果您想向特定的计量器添加标记,请将MeterFilter
注册为bean。有关示例,请参阅以下代码:https://github.com/izeye/sample-micrometer-spring-boot/blob/so-53925641/src/main/java/com/izeye/sample/config/MetricsConfig.java#L40-L52
发布于 2018-12-27 01:51:52
为了后人着想,这里是我的代码解决方案。选择的答案建议使用@Autowired bean,但这对于我的特定用例并不是必需的。
为了区分我想要和不想要有instanceId标签的仪表,我在那些我不想要instanceId标签的仪表上设置了一个"AGG“标签键(即,它们是将从所有实例聚合的指标),然后将其删除。
@Bean
public MeterRegistryCustomizer<MeterRegistry> buildMeterRegistry() {
return new MeterRegistryCustomizer<MeterRegistry>() {
@Override
public void customize(MeterRegistry registry) {
registry.config()
.meterFilter(new MeterFilter() {
@Override
public Meter.Id map(Meter.Id id) {
// Check for the "AGG" tag
if (id.getTag("AGG") != null) {
log.debug("Setting an aggregate meter: {} :: {}", id.getName(), id.getTags());
// Remove the "AGG" tag
List<Tag> tags = id.getTags().stream()
.filter(tag -> !StringUtils.equalsIgnoreCase(tag.getKey(), "AGG"))
.collect(Collectors.toList());
// Create a new Meter.Id
return new Meter.Id(id.getName(), tags, id.getBaseUnit(), id.getDescription(), id.getType());
}
// Create a new Meter.Id with the instanceId tag
return new Meter.Id(id.getName(), Arrays.asList(Tag.of("instanceId", instanceId)), id.getBaseUnit(), id.getDescription(), id.getType());
}
})
.meterFilter(MeterFilter.denyNameStartsWith("jvm.gc.pause"))
.meterFilter(MeterFilter.denyNameStartsWith("logback"))
.meterFilter(MeterFilter.denyNameStartsWith("process"))
.meterFilter(MeterFilter.denyNameStartsWith("system.cpu"))
.meterFilter(MeterFilter.denyNameStartsWith("jvm.buffer"))
.meterFilter(MeterFilter.denyNameStartsWith("jvm.classes"));
}
};
}
https://stackoverflow.com/questions/53925641
复制相似问题