Что лучше: push-модель или pull-модель в мониторинге?

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

Ответ

Выбор между push и pull моделями зависит от конкретных требований к системе мониторинга.

Pull-модель (например, Prometheus)

  • Как работает: Центральный сервер (Prometheus) периодически опрашивает (scrapes) целевые эндпоинты (exporters) по HTTP.
  • Преимущества:
    • Масштабируемость и отказоустойчивость: Сервер контролирует частоту опроса. Если целевой сервис падает, это не влияет на сервер мониторинга.
    • Консистентность: Легко обнаружить недоступные цели.
    • Безопасность: Можно настроть доступ только с сервера мониторинга к экспортерам.
  • Недостатки: Не подходит для кратковременных задач (short-lived jobs), так как сервер может не успеть их опросить.

Пример конфигурации Prometheus (pull):

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['192.168.1.10:9100', '192.168.1.11:9100']

Push-модель (например, StatsD, Fluentd для логов)

  • Как работает: Приложение или агент самостоятельно отправляет (pushes) метрики или логи на центральный агрегатор (например, Graphite, Loki).
  • Преимущества:
    • Оперативность: Данные можно отправлять немедленно после события.
    • Гибкость: Идеально для событийных данных и кратковременных процессов (batch jobs, serverless functions).
  • Недостатки:
    • Сложность масштабирования: Агрегатор может стать узким местом при пиковой нагрузке.
    • Потеря данных: Если агрегатор недоступен, данные могут быть потеряны (требуются буферизация и механизмы повтора).

Пример отправки метрики через StatsD (push):

echo "app.orders.count:1|c" | nc -u -w0 statsd-aggregator 8125

Практический выбор:

  1. Prometheus (Pull) — для мониторинга состояния инфраструктуры и долгоживущих сервисов.
  2. PushGateway + Prometheus — для сбора метрик от кратковременных задач (например, CronJob в Kubernetes).
  3. Fluentd/Loki (Push) — для централизованного сбора и агрегации логов.
  4. Гибридный подход — наиболее распространен: Prometheus для метрик инфраструктуры, push-модель для логов и бизнес-событий.