【问题标题】:Micrometer - Common tags for specific metrics千分尺 - 特定指标的常用标签
【发布时间】:2018-12-25 21:09:11
【问题描述】:

我正在尝试弄清楚如何为特定指标设置通用标签。注意:我使用的是 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 的 Meters 没有帮助。

似乎唯一的方法是创建两个 MeterRegistryCustomizer 对象,一个用于 Spring 指标和我创建的任何需要公共标签的自定义指标,另一个用于不需要公共标签的对象。

有没有一种方法可以完成我所缺少的?

【问题讨论】:

    标签: spring micrometer spring-micrometer


    【解决方案1】:

    如果你想为特定的仪表添加标签,请将MeterFilter注册为一个bean。例如,请参见以下代码:https://github.com/izeye/sample-micrometer-spring-boot/blob/so-53925641/src/main/java/com/izeye/sample/config/MetricsConfig.java#L40-L52

    【讨论】:

    • 呃……这有点笨拙,但它确实有效。我不需要创建单独的 bean,我只是内联实例化了 MeterFilter。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 2019-04-10
      • 2020-03-15
      • 2019-02-22
      • 1970-01-01
      相关资源
      最近更新 更多