Что такое Prometheus Pushgateway и для чего он используется?

«Что такое Prometheus Pushgateway и для чего он используется?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Prometheus Pushgateway — это вспомогательный сервис, который позволяет отправлять (push) метрики в Prometheus от задач, которые не могут быть опрошены (scraped) напрямую по модели pull. Это необходимо для кратковременных или пакетных заданий (jobs), которые завершаются до того, как Prometheus до них доберется.

Типичные сценарии использования в DevOps:

  1. Cron-задачи или скрипты: Запускаются, выполняют работу, отправляют метрики (например, длительность выполнения, статус завершения) в Pushgateway и завершаются.
  2. Пакетная обработка (batch processing): Задачи, которые обрабатывают данные и хотят сообщить о количестве обработанных записей или ошибках.
  3. Сервисы за NAT или в изолированных сетях, которые не могут быть доступны для Prometheus.

Как это работает:

  1. Задача отправляет свои метрики HTTP POST-запросом на Pushgateway.
  2. Pushgateway временно хранит эти метрики.
  3. Prometheus, настроенный на scrape Pushgateway как обычную цель, периодически забирает (pull) накопленные метрики.

Пример отправки метрики из bash-скрипта:

#!/bin/bash
# cron-job.sh
start_time=$(date +%s)

# ... выполнение работы задачи ...

end_time=$(date +%s)
duration=$((end_time - start_time))

# Отправляем метрику в Pushgateway
cat <<EOF | curl --data-binary @- http://pushgateway.monitoring:9091/metrics/job/cron_job/instance/$(hostname)
# TYPE my_cron_job_duration_seconds gauge
my_cron_job_duration_seconds $duration
# TYPE my_cron_job_last_success gauge
my_cron_job_last_success $(date +%s)
EOF

Важно: Pushgateway не предназначен для метрик долгоживущих сервисов. Для них всегда предпочтительна стандартная pull-модель Prometheus.