Что такое Prometheus
Prometheus — это открытая система мониторинга и оповещения, которая собирает метрики с серверов, контейнеров и приложений в режиме реального времени. Она была создана в SoundCloud в 2012 году и стала частью Cloud Native Computing Foundation, что подтверждает её популярность в индустрии. Prometheus использует pull-модель сбора данных, мощный язык запросов PromQL и встроенные механизмы алертинга, что делает его стандартом де-факто для мониторинга в Kubernetes и облачных средах.
Как это работает
Prometheus периодически опрашивает целевые объекты (targets) по HTTP, получая от них метрики. Каждая метрика хранится как временной ряд, идентифицируемый именем и набором меток (labels) — пар ключ-значение, которые позволяют фильтровать и агрегировать данные. Например, метрика http_requests_total может иметь метки method="GET", status="200", instance="10.0.0.1:8080".
Цели мониторинга задаются в конфигурационном файле prometheus.yml либо обнаруживаются автоматически через механизмы сервис-дискавери (например, для Kubernetes). Prometheus хранит данные локально на диске в эффективном формате временных рядов, поддерживая также интеграцию с внешними хранилищами для долгосрочного хранения.
Язык запросов PromQL
PromQL — это функциональный язык запросов, позволяющий выбирать и агрегировать временные ряды. Примеры типичных запросов:
# Средняя загрузка CPU за 5 минут по всем инстансам
avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))
# Количество HTTP-запросов со статусом 500 за последний час
sum(rate(http_requests_total{status="500"}[1h]))PromQL поддерживает операции сравнения, математические функции, агрегации (sum, avg, min, max) и функции для работы с временными окнами (rate, increase, histogram_quantile).
Алертинг и интеграции
Prometheus включает компонент Alertmanager, который обрабатывает алерты, создаваемые правилами в Prometheus. Правила задаются в конфигурации и могут отправлять уведомления в Slack, Email, PagerDuty и другие системы. Пример правила:
# prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets: ["alertmanager:9093"]
rule_files:
- "alerts.yml"# alerts.yml
groups:
- name: example
rules:
- alert: HighCPUUsage
expr: avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.2
for: 10m
labels:
severity: critical
annotations:
summary: "CPU usage is high"Подводные камни и ограничения
- Pull-модель: Prometheus сам опрашивает цели, поэтому для сбора метрик с приложений требуется, чтобы они были доступны по сети и отдавали метрики в формате Prometheus. Для приложений, которые не поддерживают этот формат, используются экспортеры (например,
node_exporterдля системных метрик). - Хранение: Локальное хранение по умолчанию ограничено по времени и объёму. Для долгосрочного хранения требуется интеграция с внешними системами, такими как Thanos или Cortex.
- Высокая доступность: Prometheus не поддерживает кластеризацию из коробки. Для отказоустойчивости запускают несколько идентичных экземпляров, но это не даёт глобальной консистентности данных.
- Масштабируемость: При большом количестве целей и метрик может потребоваться шардирование и федерация.
Когда использовать
Prometheus идеально подходит для мониторинга микросервисных архитектур, особенно в Kubernetes, где он собирает метрики со всех узлов, подов и контейнеров. Он также эффективен для мониторинга инфраструктуры (CPU, память, диск) и приложений, которые предоставляют метрики в формате Prometheus. Однако для мониторинга событий, логов или трассировок он не предназначен — для этого используют другие инструменты (например, ELK, Jaeger).
Коротко
- Prometheus — система мониторинга с pull-моделью сбора метрик, хранящая данные как временные ряды с метками.
- PromQL — мощный язык запросов для анализа и агрегации метрик.
- Алертинг реализуется через Alertmanager, который отправляет уведомления в различные каналы.
- Основные ограничения: локальное хранение, отсутствие кластеризации, необходимость экспортеров для приложений, не поддерживающих формат Prometheus.
