Как создать метрику Gauge с тегами с помощью Java prometheus sdk?

У меня есть веб-сервис Springboot Kotlin, который использует Actuator (spring-boot-starter-actuator) и микрометр (micrometer-registry-prometheus) для предоставления метрик скребку Prometheus.

Чтобы отслеживать размер операций в очереди, я использую настраиваемый датчик.

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

Спасибо.


person ProvoPropoli    schedule 26.03.2020    source источник


Ответы (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

person ProvoPropoli    schedule 26.03.2020

Есть два способа создания датчиков:

Сердечник микрометра

С помощью Micrometer вы можете создать датчик на основе метода объекта, который вы хотите проверить, например, из 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 и лямбда (() - ›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());

Теперь у тебя есть выбор.

person Sylhare    schedule 10.12.2020