Отслеживайте статус пакетных заданий с помощью метрик в Prometheus

В некоторых наших приложениях есть пакетные задания, которые собирают данные каждую ночь. Эти пакетные задания, которые представляют собой скрипты Python, используют Prometheus Pushgateway для передачи значений метрик в Prometheus, и у нас есть правила, которые запускают предупреждения (в Alertmanager), когда эти метрики становятся недействительными (например, превышают определенный порог).

Теперь мы также хотели бы использовать метрики Prometheus, чтобы дважды проверить правильность выполнения самих пакетных заданий: например, было ли задание начато вовремя? Были ли ошибки? Работа выполнена до конца? С этой целью мы хотели бы изменить наши сценарии Python, чтобы выдавать метрику при запуске и завершении сценария, а также при возникновении каких-либо ошибок. Однако это вызывает некоторые проблемы: у нас довольно много пакетных заданий, и 3 метрики на пакетное задание создают много ручной настройки правил / предупреждений; мы также хотели бы отображать статус графически в Grafana и не совсем уверены, как это будет выглядеть правильно.

Кто-нибудь еще пытался решить аналогичную проблему, используя метрики Prometheus для мониторинга состояния нескольких пакетных заданий? Какие показатели вы записывали и как выглядели ваши предупреждения / правила? Вы нашли интуитивно понятный способ графического отображения статуса каждого пакетного задания?


person daniel238    schedule 13.07.2020    source источник


Ответы (1)


Вы можете предоставить метрику для каждого пакетного задания под названием last_run_at. И тогда у вас могут быть предупреждения, основанные на том, было ли задание запущено более 24 часов назад (или независимо от вашего порогового значения).

Простое предупреждение будет выглядеть так: last_run_at{env="prod"} < scalar(time()) - 60 * 60 * 24

Для этого пригодится функция time () в Prometheus. Документы: https://prometheus.io/docs/prometheus/latest/querying/functions/#time

Вам не нужно делать оповещения для каждой работы. Вы можете сделать оповещение о любом задании, которое не выполнялось в течение последних 24 часов. Или вы можете фильтровать по среде или любым другим меткам.

Дело в том, что для оповещения не обязательно должно быть соотношение 1: 1. И вы должны иметь возможность довольно легко построить график в Grafana.

person Saurabh Maurya    schedule 18.07.2020