首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MicroMeter:删除/禁用某个标记

MicroMeter:删除/禁用某个标记
EN

Stack Overflow用户
提问于 2019-03-13 16:35:04
回答 1查看 3.7K关注 0票数 4

我使用默认的MicroMeter绑定程序,其中之一创建Gauage jvm.memory.used。问题是它附带了2 availableTags:"area“和"id”。这实际上产生了我不感兴趣的6个量规。

我做到了:

代码语言:javascript
复制
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCustomizer() {

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

但是这会忽略所有带有这个标签的仪表。

我如何才能deny() jvm.memory.used和一个id标签?

谢谢!

编辑:

看看globalRegistry:

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-13 21:22:44

我觉得你可能把概念混为一谈。标签只是用额外的信息来“装饰”度量/量规,它们实际上并不会导致更多的量规被发送。例如,线Metrics.gauge("name", Tags.of("id","a", "area","b"), 1)仅仅是一个量规对象。使用jvm.memory.used标记拒绝id可能会拒绝所有jvm.memory.used。如果您仍然希望使用可以使用的jvm.memory.used标记筛选id

代码语言:javascript
复制
@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方法。

代码语言:javascript
复制
@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),并按您想要的任何值进行查询:

代码语言:javascript
复制
@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;
        }
    };
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55146929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档