如何使用 Java prometheus sdk 创建带有标签的 Gauge 度量?

Posted

技术标签:

【中文标题】如何使用 Java prometheus sdk 创建带有标签的 Gauge 度量?【英文标题】:How to create a Gauge metric with tags using Java prometheus sdk? 【发布时间】:2020-07-07 03:18:52 【问题描述】:

我有一个 springboot Kotlin Web 服务,它使用 Actuator (spring-boot-starter-actuator) 和 micrometer (micrometer-registry-prometheus) 将指标公开给 prometheus 刮板。

为了监控队列中操作的大小,我使用了自定义 Gauge

val gauge = Gauge.build()
        .name("operation_queue_size")
        .help("Size of queue")
        .register(collectorRegistry)

# later
gauge.inc()
# or
gauge.dec()

我想改进这个指标,在队列中添加一个表示操作类型的标记,但在 Builder 类上没有找到任何合适的方法。

目标是公开如下指标:

operation_queue_sizeop_type="deletions" 999
operation_queue_sizeop_type="insertions" 999

谢谢。

【问题讨论】:

【参考方案1】:

有两种创建仪表的方法:

千分尺芯

使用 Micrometer,您可以从要检查的对象方法创建 Gauge,例如 from baeldung:

import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;

List<String> list = new ArrayList<>(4);

Gauge gauge = Gauge
  .builder("cache.size", list, List::size)
  .tags("example", "list size")
  .register(registry);

它需要一个字符串 "cache.size" 作为仪表的名称,一个对象 list 和一个 lambda (() -> Double) 这里它是 list::size。并且仪表将因此而更新。

然后仪表每次都会自动更新(这是一个带有断言的示例,值是什么):

assertEquals(0.0, gauge.value());
list.add("1");
assertEquals(1.0, gauge.value());

普罗米修斯客户端

使用 prometheus sdk 是:

import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Gauge;

Gauge gauge = Gauge.build()
        .build("cache.size", "size of the cache")
        .labelNames("type")
        .register(collectorRegistry);

但是您需要手动更改仪表值:

# Increase
gauge.labels("list size").inc();
# Decrease
gauge.labels("list size").dec();
# Set value
gauge.labels("list size").set(list.size());

现在你可以选择了。

【讨论】:

【参考方案2】:

我找到了解决办法:

val gauge = Gauge.build()
        .name("ic_queue_size")
        .help("Size of queue")
        .labelNames("op_type")
        .register(collectorRegistry)

# later
gauge.labels("deletions").inc()
# or
gauge.labels("deletions").dec()

之所以很难找到,是因为这个库使用了labels这个词,而prometheus文档将它们称为tags

【讨论】:

以上是关于如何使用 Java prometheus sdk 创建带有标签的 Gauge 度量?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 mule(基于 Java)日志推送到 Prometheus 存储?

与 Redis 和 Prometheus 集成

Prometheus监控指标的label注入方法

如何从 Prometheus 中的主题消费消息

在 java 中使用 Prometheus 收集的时间序列的自定义时间戳

CentOS7部署Prometheus