【问题标题】:How to create a Gauge metric with tags using Java prometheus sdk?如何使用 Java prometheus sdk 创建带有标签的 Gauge 度量?
【发布时间】: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_size{op_type="deletions"} 999
operation_queue_size{op_type="insertions"} 999

谢谢。

【问题讨论】:

    标签: spring-boot prometheus spring-boot-actuator micrometer spring-micrometer


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-23
        • 2021-12-12
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 2022-06-22
        • 2010-10-30
        • 2018-04-11
        相关资源
        最近更新 更多