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 при построении дашбордов.
Другие термины в теме «DevOps и облака»
Не хватает деталей?
Напишите, что уточнить по теме «prometheus» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).