gpt4 book ai didi

spring - Micrometer - 特定指标的通用标签

转载 作者:行者123 更新时间:2023-12-05 03:03:27 29 4
gpt4 key购买 nike

我正在尝试弄清楚如何为特定指标设置通用标签。注意:我正在使用 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 指标和我创建的任何自定义指标,它们确实需要公共(public)标签,另一个用于不需要的。

有没有办法完成我所缺少的?

最佳答案

为了后代,这是我的代码解决方案。所选答案建议使用 @Autowired MeterFilter 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"));
}
};
}

关于spring - Micrometer - 特定指标的通用标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53925641/

29 4 0