如何更新千分尺中导出指标的标签值?

时间:2020-03-20 07:27:56

标签: spring-boot prometheus spring-micrometer

我使用千分尺输出第三方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_count{count="1",instance="localhost:8080",job="monitor-app",req_id="1157408321"}
failed_test_count{count="2",instance="localhost:8080",job="monitor-app",req_id="1157408321, 1157408321"}
failed_test_count{count="3",instance="localhost:8080",job="monitor-app",req_id="1157408321, 1157408321, 1157408321"}

问题是此度量标准大小随许多请求而增加。 是否有办法删除或替换相同的标签,并仅使用更新的req_ids导出一个动态指标?

1 个答案:

答案 0 :(得分:0)

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

registry.remove(summary.getId());

这将产生一个线路指标。

failed_test_count{count="4",instance="localhost:8080",job="monitor-app",req_id="1157408321, 58500184, 58500184, 58500184"}