MicroMeter:删除/禁用某个标签

问题描述 投票:1回答:1

我正在使用默认的MicroMeter活页夹,其中一个创建了Gauage jvm.memory.used。问题在于它带有2个可用标签:“area”和“id”。这实际上产生了6个我不感兴趣的仪表。

我能够做到这一点:

@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCustomizer() {

    return  registry -> {
        registry.config().meterFilter(MeterFilter.ignoreTags("id"));
    };
}

但是这将忽略所有带有此标签的仪表。

我怎么能deny()只有jvm.memory.usedid标签?

谢谢!

编辑: 看看globalRegistry:

Metrics.globalRegistry.getRegistries().iterator().next().meterMap

Meter的每个jvm.memory.used具有以下结构:

"MeterId{name='jvm.memory.used', tags=[tag(area=nonheap),tag(id=Metaspace)]}"

所以我们不能只通过getName().equals("jvm.memory.used") && getTag("id") != null过滤

java spring-boot spring-boot-actuator micrometer spring-micrometer
1个回答
3
投票

我想你可能会混淆概念。标签只是用额外的信息“装饰”指标/仪表,它们实际上不会导致发送更多的仪表。例如,线Metrics.gauge("name", Tags.of("id","a", "area","b"), 1)只是一个规范对象。用jvm.memory.used标签否认id可能会否认所有的jvm.memory.used。如果您仍想使用jvm.memory.used标签过滤id,您可以使用

@Bean
public MeterFilter meterFilter() {
    return MeterFilter.deny(
        id -> "jvm.memory.used".equals(id.getName()) &&
              id.getTags().stream().anyMatch(t -> "id".equals(t.getKey()))
         );
    }

另一方面,如果您只想删除id标记,则需要使用replaceTags方法。

@Bean
public MeterFilter meterFilter() {
    return new MeterFilter() {
        @Override
        public Meter.Id map(Meter.Id id) {
            if("jvm.memory.used".equals(id.getName())) {
                List<Tag> tags = id.getTags().stream().filter(t -> !"id".equals(t.getKey())).collect(Collectors.toList());
                return id.replaceTags(tags);
            }
           return id;
        }
    };
}

您也可以通过调用Meter.Id完全自定义返回的new Meter.Id(name, tags, baseUnit, description, type),并根据您想要的值来查找:

@Bean
public MeterFilter meterFilter() {
    return new MeterFilter() {
        @Override
        public Meter.Id map(Meter.Id id) {
            if("jvm.memory.used".equals(id.getName())) {
                return new Meter.Id(id.getName(), <put tags here>, id.getBaseUnit(), id.getDescription(), id.getType()
            }
           return id;
        }
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.