千分尺相当于普罗米修斯的标签

Posted

技术标签:

【中文标题】千分尺相当于普罗米修斯的标签【英文标题】:Micrometer's equivalent of Prometheus' labels 【发布时间】:2018-08-16 15:04:42 【问题描述】:

我正在将 Spring Boot 应用程序从 Spring Boot 1(使用 Prometheus Simpleclient)转换为 Spring Boot 2(使用 Micrometer)。

我很难将 Spring Boot 1 和 Prometheus 中的标签转换为 Micrometer 中的概念。例如(使用 Prometheus):

private static Counter requestCounter =
  Counter.build()
      .name("sent_requests_total")
      .labelNames("method", "path")
      .help("Total number of rest requests sent")
      .register();
...
requestCounter.labels(request.getMethod().name(), path).inc();

Micrometer 的 标签 似乎与 Prometheus 的 标签 有所不同:所有 都必须预先声明,而不仅仅是 钥匙。

可以将 Prometheus 的标签与 Spring(Boot)和 Micrometer 一起使用吗?

【问题讨论】:

【参考方案1】:

进一步挖掘表明,只有千分尺标签的 keys 必须预先声明——但构造函数确实需要成对的键/值;价值观无关紧要。并且在使用指标时必须指定键。

这行得通:

private static final String COUNTER_BATCHMANAGER_SENT_REQUESTS = "batchmanager.sent.requests";
private static final String METHOD_TAG = "method";
private static final String PATH_TAG = "path";
private final Counter requestCounter;
...
requestCounter = Counter.builder(COUNTER_BATCHMANAGER_SENT_REQUESTS)
    .description("Total number of rest requests sent")
    .tags(METHOD_TAG, "", PATH_TAG, "")
    .register(meterRegistry);
...
 Metrics.counter(COUNTER_BATCHMANAGER_SENT_REQUESTS, METHOD_TAG, methodName, PATH_TAG, path)
    .increment();

【讨论】:

Micrometer 的标签与 Prometheus 的键/标签相同。与 Prometheus 将指标注册为静态变量的要求相比,Micrometer 允许避免这种情况。作为回报,您可以同时声明键/标签。因此,如果您愿意,可以避免第一个“空”指标声明,而只保留第二个 Metrics.counter 调用。如果您想保留描述,可以将register 调用内联。在这种情况下,千分尺是宽容的(与 Prometheus 相比),实际上与 Pr​​ometheus 对标签所做的查找大致相同。 这很完美!你是救生员。基本上我的理解是用空值初始化所有标签(Prometheus 中的维度),然后在递增时用特定值填充它们 我很惊讶现在有一种干净的方式使用带有Counter.builder() 的 Prometheus 标签。【参考方案2】:

我知道这个话题有点过时了,但仍然如此。 我想用 Spring Boot Acuator 来解决它,使用 PrometheusMeterRegistry 来获取 CollectorRegistry

@Service
public class SomethingService 

    private final PrometheusMeterRegistry prometheusMeterRegistry;
    private final Counter counter;

    public SomethingService(PrometheusMeterRegistry prometheusMeterRegistry) 
        this.prometheusMeterRegistry = prometheusMeterRegistry;
        counter = Counter.build()
                .name("counter_name")
                .help("counter help")
                .labelNames("your_labels")
                .register(prometheusMeterRegistry.getPrometheusRegistry());
    

    @PostConstruct
    private void init() 
        inc("your_value");
    

    private void inc(String value) 
       counter.labels(String.valueOf(value)).inc();
    

【讨论】:

但是 Spring Boot 2 的想法是使用 Micrometer 而不是将您的应用程序绑定到 Prometheus...

以上是关于千分尺相当于普罗米修斯的标签的主要内容,如果未能解决你的问题,请参考以下文章

千分尺和普罗米修斯计时器作为速率

Quarkus - 将千分尺指标推送到普罗米修斯

用于普罗米修斯的弹簧启动执行器与千分尺混合返回空结果

Prometheus:PromQL 减法,相同的标签,不同的值

获取将千分尺集成到弹性搜索应用程序的异常

在普罗米修斯的标签中使用标识。标签的最佳实践