Как написать экспортер Prometheus, который собирает значения в файл?

#python #prometheus #monitoring #grafana #prometheus-node-exporter

Вопрос:

Допустим, у меня есть файл, который используется для отслеживания состояния устройств, подключенных к компьютеру. Файл выглядит так:

 DEVICE_1 = ONLINE
DEVICE_2 = OFFLINE
DEVICE_3 = ONLINE
DEVICE_4 = OFFLINE
 

Как я могу использовать библиотеку Python prometheus_client для создания пользовательского экспортера, который будет очищать значения в этом файле? Я планирую отобразить значения в виде графика временных рядов с помощью Grafana, чтобы я мог видеть, как состояние каждого устройства меняется со временем. Нужно ли мне использовать гистограмму или датчик? Важно, чтобы я сохранял идентификатор устройства и его состояние вместе. Может ли кто-нибудь объяснить наилучший подход, чтобы их можно было преобразовать в метрику?

Ответ №1:

Здесь есть 2 вопроса: какой тип метрики использовать для этих данных и как использовать клиентскую библиотеку.

Я собираюсь ответить на вопрос о типе метрики. Я определяю «лучший» как создание графика, подобного приведенному ниже, который будет циклически изменяться между 1/0, когда устройство подключено/ОТКЛЮЧЕНО: булев калибр

Я бы реализовал датчик, который либо равен 1/0. Гистограмма добавляет сложности и выборок наблюдений. Его можно использовать для отслеживания скорости удаления устройств, т. е. устройство 1 удаляется/подключается X раз за последние 60 минут.

В вашем приложении-экспортере python проанализируйте свой файл и используйте метки для указания значений для каждого устройства

 g = Gauge('customapp_activedevices', 'Description of gauge')

while True:
    file= open("devicefile", "r")
    deviceCollection = file.read()

    for device in deviceCollection:
        if device.status == 'ONLINE':
            metricVal = 1
        else:
            metricVal = 2
       g.labels(devicename=device).set(metricVal)

 

Тогда ваш запрос grafana довольно прост, потому что эти метки станут разными рядами на вашем графике. Вы также должны установить метку экземпляра в своем экспортере, чтобы панель мониторинга grafana могла обрабатывать несколько экземпляров вашего экспортера и несколько устройств.

запрос графана

Комментарии:

1. Спасибо, что ответили! На самом деле это именно то решение, к которому я тоже пришел. Однако есть одна проблема. Каждый раз, когда я изменяю состояние устройства в файле. Скажем, DEVICE_1 = ОТКЛЮЧЕН. Он будет отображаться как совершенно новая метрика, и Grafana дважды отобразит 2 состояния (онлайн, оффлайн) DEVICE_1 на панели мониторинга . Знаете ли вы о чем-нибудь, чтобы я мог показать метрику только один раз и как она меняется со временем?

2. Подожди, не обращай внимания. Я смог разобраться в своей проблеме. Я добавлял в свою метрику вторую метку, которая отслеживала состояние, и это привело к созданию совершенно отдельной метрики. То, что Брэндон сделал выше, работает правильно. Просто используйте 1 метку, которая статична, и вы знаете, что она не изменится. Это предотвратит создание другой метрики. Еще раз спасибо!