Передача метрик в pushgateway заменяет старую

#java #prometheus-pushgateway

Вопрос:

У нас есть java — приложение под названием MonitorApp , которое работает в контейнере docker. Цель этого приложения состоит в том, чтобы выполнять определенные задачи, нажимать на метрики Pushgateway и умирать.

Это приложение для мониторинга запускается как Kubernetes Cron Job . Это означает, что после публикации матриц оно будет уничтожено, и через некоторое время появится новый экземпляр.

Я использую API Java Pushgateway для публикации матриц. Вот мой пример кода для того же:

 class MonitorApp {

   public void static main(String args[]) {
       
        List<String> labelKeys = Arrays.asList("key01", "key02");
        List<String> labelValues = Arrays.asList("value01", "value01");

        PushGateway client = new PushGateway("localhost:9091");
        CollectorRegistry registry = CollectorRegistry.defaultRegistry;

        String jobName = "midm_monitor_app";
        String metric = "metrin_name";
        String help = "metric_help";


        Counter counter = Counter.build()
                .name(metric)
                .help(help)
                .labelNames(labelKeys.toArray(new String[0]))
                .register(registry);
        counter.labels(labelValues.toArray(new String[0])).inc();

        client.push(registry,jobName);
     }
}

 

Проблема в том, что я не могу увеличить значение показателя счетчика.
Я не могу найти способ получить предыдущее значение счетчика, чтобы увеличить его.

Я читал, что цель Pushgateway состоит в том, чтобы обрабатывать такого рода варианты использования.

Пожалуйста, подскажите, как мне с этим справиться?

Ответ №1:

Насколько я понимаю, вы хотите, чтобы метрика увеличивалась между несколькими запусками вашего экземпляра. Это не является целью шлюза push: он будет хранить только те значения, которые вы нажимаете, а не агрегировать их каким — либо образом, кроме добавления/замены группы показателей.

Хотя я никогда их не использовал, существуют решения для агрегирования с использованием других стеков мониторинга (например, statd) или конкретных проектов, таких как pushprom. Вы также можете запускать запуски как события (например, в elasticsearch) для дальнейшей агрегации.

Если это действительно чувствительная часть мониторинга вашего приложения, я советую вам держаться подальше от решений SPOF. Вы можете создать свой собственный кэш метрик, используя любое (распределенное) хранилище ключей/значений, имеющееся в вашем распоряжении.