如何使用 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 存储?