【问题标题】:How to configure additional tags depending on metric name for actuator metrics如何根据执行器指标的指标名称配置附加标签
【发布时间】:2021-04-16 12:44:58
【问题描述】:

我是否可以配置要添加到@Timed 指标的标签?我知道重写 MebMvcTagsProvider 或 WebMvcTagsContributor 类将返回所有 mvc 指标通用的标准标签集。但是有什么方法可以排除或包含某些指标的动态值的标签?就像在这种情况下:

WebMvcTagsProvider object -> provides a set of tags whose values like status etc. are set here -> tag1, val1; tag2, val2

然后我们有一个像这样的rest api:

@Timed("metric.1")
public String api1() {}

还有一个类似这样的 api:

@Timed("metric.2")
public String api2() {}

因此,在调用这两个 api 之后,我们将获得这些指标,它们都具有相同的标签集

metric-1(tag1="val1", tag2="val2", status=201)
metric-2(tag1="val1", tag2="val2", status=200)

但是我们能否为这两个指标返回不同的标签集,如下所示:

metric-1(tag1="val1", status=201)
metric-2(tag2="val2", status=200)

我找到了一个 WebMvcMetricsFilter 类,它是所有指标生成计时器的过程,有什么方法可以利用它来配置基于指标名称返回的标签吗?

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: java spring-boot spring-boot-actuator spring-micrometer


    【解决方案1】:

    一个选择(因为是春天,可能有很多方法可以做到这一点)是声明一个千分尺MeterFilter 并根据名称更新标签。

    @Bean
    public MeterFilter meterFilter() {
        return new MeterFilter() {
            @Override
            public Meter.Id map(Meter.Id id) {
                if(id.getName().equals("metric-1")) {
                    return id.withTags(Tags.of("foo", "bar"));
                }
                // more conditions here
                return id;
            }
        };
    }
    

    查看 micrometer 中的此文档(第 6.2 节),了解如何转换指标。您可以通过这种方式添加、更新或删除标签。

    【讨论】:

    • 这样的问题是标签应该是静态的,如果我以这种方式过滤掉标签,我无法将值分配给某些字段,例如响应状态等
    • 静态是什么意思?
    • 因为不是动态的。我们不需要在这里将标签的值作为常量吗?
    • 您可以为标签使用命名约定,也可以使用startsWithcontainsMeter.Id 中的名称是 String 对象。
    • 在这里,我们正在返回这样的标签,对吧? id.withTags(Tags.of("foo", "bar"));其中“bar”是一个无法根据其他数据设置的设定值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2018-08-14
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多