пользовательский сборщик prometheus с "кэшированными" метриками - PullRequest
0 голосов
/ 09 мая 2020

Я хочу иметь сборщик прометея, который можно запрашивать через http на порту 9100, который доставляет метри c. curl всегда должен просто предоставлять последнюю метрику c, которую я создаю с помощью моей функции здесь:

https://github.com/unnuetz/custom-prometheus-collector/blob/master/check.py#L5 -L11

моя проблема теперь в том, что после каждый цикл в 100 секунд, который я добавил сюда: https://github.com/unnuetz/custom-prometheus-collector/blob/master/main.py#L20 -L23 добавляется следующий метри c, который я создаю, но я хотел бы иметь "сброс" после каждого вызова checker (), и не то, чтобы отдельные метрики, которые я создал, всегда просто добавляются в мой, допустим, реестр. есть ли способ удалить все метрики, которые были добавлены ранее? Важно то, что между 100 секундами start_http_server (9100, addr = '0.0.0.0') все еще доступен и доставляет последние metri c данные, полученные с последнего запуска checker (). в моем демонстрационном файле я всегда хочу иметь только один метри c со случайным сгенерированным именем метки.

enter image description here

1 Ответ

0 голосов
/ 10 мая 2020

Вместо использования встроенного Gauge , вы можете использовать собственный сборщик .

Обратите внимание, что это не спасет вас в Prometheus:

  1. он будет создавать новые метрики каждый раз, когда Prometheus очищает ваше приложение.
  2. предыдущие метрики c (s) по-прежнему будут отображаться в Prometheus, пока они не будут помечены как устаревшие (~ 5 мин).

Если использование настраиваемого сборщика не является вариантом, потому что вам нужно показать некоторый код, используя глобальные метрики. Вы можете внедрить функцию reset(), аналогичную функции remove () , используя связанный метод.

import CollectorRegistry from prometheus_client.registry

def _resetCollector(self):
    with self._lock:
        # reset whatever name / value you want
        pass

CollectorRegistry.reset = _resetCollector


# wherever you want to reset it
import REGISTRY from prometheus_client.registry
REGISTRY.reset()

Конечно, она сломается при изменении реализации CollectorRegistry.

...