prometheus

Prometheus — это система мониторинга и оповещений с открытым исходным кодом, разработанная в SoundCloud и принятая в CNCF (Cloud Native Computing Foundation) в 2016 году. Prometheus собирает метрики из целевых сервисов по модели pull (опрашивает endpoints), хранит их в многомерной временной базе данных и предоставляет гибкий язык запросов PromQL для анализа и алертинга.

Архитектура Prometheus

Prometheus Server — ядро системы. Выполняет scraping (опрос) метрик из целей по HTTP на endpoint /metrics, сохраняет данные в локальную TSDB (Time Series Database), выполняет правила записи (recording rules) и алерты.

Exporters — агенты, экспортирующие метрики внешних систем в формат Prometheus. Node Exporter — метрики хост-системы (CPU, память, диск, сеть). MySQL Exporter, PostgreSQL Exporter — метрики баз данных. Redis Exporter, Nginx Exporter и сотни других.

Pushgateway — промежуточное хранилище для кратковременных задач, которые не могут быть опрошены (batch jobs). Задача пушит метрики в Pushgateway; Prometheus опрашивает его.

Alertmanager — управляет оповещениями: дедупликация, группировка, маршрутизация на каналы (Slack, PagerDuty, Email, Telegram, OpsGenie).

Grafana — стандартный инструмент визуализации метрик Prometheus. Поддерживает PromQL в запросах, богатые дашборды, алерты.

Формат метрик Prometheus

Метрики экспортируются в текстовом формате — простые строки вида metric_name{label1="value1",label2="value2"} value timestamp. Каждая уникальная комбинация имени метрики и набора label — отдельный временной ряд.

Четыре типа метрик: Counter — монотонно возрастающий счётчик (количество запросов, ошибок). Gauge — значение, которое может расти и падать (текущее использование памяти, температура). Histogram — распределение значений по бакетам (latency запросов). Summary — квантили на стороне клиента.

PromQL: язык запросов

PromQL (Prometheus Query Language) — мощный язык для работы с временными рядами. Примеры:

  • http_requests_total — все метрики с этим именем.
  • rate(http_requests_total[5m]) — скорость запросов за последние 5 минут.
  • histogram_quantile(0.99, rate(request_duration_seconds_bucket[5m])) — 99-й перцентиль latency.
  • sum by (service) (rate(errors_total[1m])) — количество ошибок по сервису.

PromQL поддерживает агрегации (sum, avg, max, min, count), бинарные операции между временными рядами, функции прогнозирования (predict_linear).

Service Discovery

Prometheus динамически обнаруживает цели через service discovery: Kubernetes (Pod, Service, Endpoint), EC2, Consul, DNS, файловый SD. В Kubernetes-среде Prometheus автоматически начинает опрашивать новые поды с аннотацией prometheus.io/scrape: "true".

Масштабирование: Thanos и Cortex

Локальная TSDB Prometheus не рассчитана на бесконечное хранение или горизонтальное масштабирование. Для enterprise-масштабов используют:

  • Thanos — расширяет Prometheus: дедупликация, долгосрочное хранение в объектном хранилище (S3/GCS), глобальный query.
  • Cortex / Grafana Mimir — многотенантная высокодоступная TSDB, совместимая с Prometheus API.
  • VictoriaMetrics — более производительная альтернатива TSDB с drop-in совместимостью.

Prometheus в экосистеме Kubernetes

Стандартный способ развёртывания — kube-prometheus-stack (Helm chart): включает Prometheus, Grafana, Alertmanager, Node Exporter, kube-state-metrics. Предоставляет готовые дашборды и алерты для Kubernetes. Prometheus Operator управляет конфигурацией через CRD: ServiceMonitor, PodMonitor, PrometheusRule.

Частые вопросы

  • Чем Prometheus отличается от Zabbix?

    Prometheus — pull-based система для облачных и контейнерных сред, с мощным PromQL и нативной интеграцией с Kubernetes. Zabbix — push-based агентная система, исторически ориентированная на традиционные серверы. Для Kubernetes-экосистемы Prometheus — стандарт де-факто.

  • Как долго Prometheus хранит данные?

    По умолчанию — 15 дней. Настраивается параметром --storage.tsdb.retention.time. Для долгосрочного хранения используют Thanos, Cortex, Mimir или VictoriaMetrics, которые переносят данные в объектное хранилище.

  • Что такое recording rules в Prometheus?

    Recording rules предвычисляют сложные PromQL-выражения и сохраняют результат как новую метрику. Это ускоряет медленные запросы и снижает нагрузку на Prometheus при построении дашбордов.

Не хватает деталей?

Напишите, что уточнить по теме «prometheus» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).

Поделиться