如何更新以微米为单位的导出度量的标签值?

Posted

技术标签:

【中文标题】如何更新以微米为单位的导出度量的标签值?【英文标题】:How to update tag value for exported metric in micrometer? 【发布时间】:2020-07-01 08:27:00 【问题描述】:

我正在使用千分尺导出第三方 api 消费的摘要。 现在我想精确计算失败的请求并导出每个失败的请求 ID。 为每个 restTemplate 交换调用调用以下方法。

private DistributionSummary incFailedCounter(String requestId) 

        this.registry = beanProvider.getRegistry();

        DistributionSummary summary = summarys.get(myCounter);
        if (summary == null) 
            Builder tags = DistributionSummary.builder("failed.test").tags("req_id", requestId, "count", "1");
            summary = tags.register(registry);
            summarys.put(myCounter, summary);
         else 

            String tag = summary.getId().getTag("req_id");
            String[] split = tag.split(",");

            summary.close();

            summarys.put(myCounter,
                    DistributionSummary.builder("failed.test")
                            .tags("req_id", tag + ", " + requestId, "count", String.valueOf(split.length + 1))
                            .register(registry));
        
        return summary;
    

此代码在每个请求的指标中插入新行。

failed_test_countcount="1",instance="localhost:8080",job="monitor-app",req_id="1157408321"
failed_test_countcount="2",instance="localhost:8080",job="monitor-app",req_id="1157408321, 1157408321"
failed_test_countcount="3",instance="localhost:8080",job="monitor-app",req_id="1157408321, 1157408321, 1157408321"

问题是这个指标大小随着请求的增加而增加。 有没有办法删除或替换相同的标签并只导出一个具有更新的 req_ids 的动态指标?

【问题讨论】:

【参考方案1】:

无法删除或更新标签,因为它们是不可变的。一种方法是注销电流表。使用以下方法删除已注册的仪表并应用新的仪表。

registry.remove(summary.getId());

这会产生一个线度量。

failed_test_countcount="4",instance="localhost:8080",job="monitor-app",req_id="1157408321, 58500184, 58500184, 58500184"

【讨论】:

以上是关于如何更新以微米为单位的导出度量的标签值?的主要内容,如果未能解决你的问题,请参考以下文章

将查询结果显示为以逗号分隔的文字

以 Micrometer 为单位的 Counter 指标的动态标签值

如何使用 F# 中的度量单位打印结果单位?

黑盒导出器响应作为度量标签

角度与弧度转换公式

如何在 PromQL 中将零值(向量(0)与度量值合并