Prometheus — это система мониторинга и сбора метрик с временными метками (time series), разработанная для высокой надёжности, гибкости и интеграции с современными распределёнными системами. Она активно используется в DevOps, SRE и облачной инженерии как ключевой компонент для наблюдаемости (observability).
Prometheus имеет встроенную time-series базу данных, собственный язык запросов — PromQL (Prometheus Query Language) — и механизм генерации алертов. Он способен собирать метрики из тысяч источников: от серверов и контейнеров до приложений, экспортёров и облачных API.
📦 Ключевые компоненты Prometheus:
- Time Series DB — собственное хранилище данных, оптимизированное под временные метки;
- PromQL — мощный язык запросов, позволяющий аггрегировать, фильтровать и вычислять значения на лету;
- Alertmanager — отдельный компонент, управляющий отправкой уведомлений по заданным правилам;
- Exporters — плагины/агенты, собирающие метрики из внешних систем (Node Exporter, Blackbox Exporter, PostgreSQL Exporter и др.);
- Service Discovery — автоматическое обнаружение сервисов в Kubernetes, EC2, Consul и других источниках.
🔍 Что можно мониторить:
- Загрузка CPU, использование памяти, сетевой трафик;
- Время ответа сервисов, ошибки, задержки, таймауты;
- Пользовательские метрики из приложений (через HTTP endpoint );
/metrics
- Kubernetes-кластеры: поды, ноды, ingress, контейнеры;
- Системные компоненты CI/CD, баз данных, брокеров сообщений и др.
🔗 Интеграция с Grafana:
Хотя Prometheus имеет собственный интерфейс, в продакшн-средах чаще используется вместе с Grafana — платформой визуализации. Grafana подключается к Prometheus как источник данных и отображает метрики на дашбордах в виде графиков, таблиц и алертов.
⚙️ Почему Prometheus стал стандартом:
- 📈 Высокая точность и детализация данных;
- ⚙️ Простота развертывания (один бинарник);
- 🔄 Интеграция с Kubernetes “из коробки”;
- 🧩 Open Source — развитая экосистема, поддержка сообществом;
- 📡 Pushgateway и federation — поддержка гибкой архитектуры сбора метрик в разных слоях системы.
Prometheus идеально подходит для микросервисов, event-driven-систем и облачной инфраструктуры, где важно быстро обнаруживать деградацию или сбои. Благодаря своей расширяемости и отказоустойчивости он стал основой мониторинга во многих крупных компаниях и open-source-решениях.
⚙️ Пример конфигурации Prometheus (prometheus.yml
)
prometheus.yml
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'node-exporter' static_configs: - targets: ['192.168.1.100:9100'] - job_name: 'my-app' metrics_path: /metrics static_configs: - targets: ['my-app.default.svc.cluster.local:8080']
🔍 Что делает этот файл:
- Устанавливает глобальный интервал опроса — 15 секунд;
- Мониторит Node Exporter по IP (сбор системных метрик);
- Сканирует HTTP endpoint у пользовательского приложения (например, Go, Python, Java).
/metrics
🔎 Примеры PromQL-запросов
📊 Использование CPU по ядрам (в процентах):
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
📈 Память, доступная на ноде:
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100
🔥 Количество HTTP 5xx-ошибок за 5 минут:
sum(rate(http_requests_total{status=~"5.."}[5m]))
⏱ Среднее время ответа приложения:
rate(http_request_duration_seconds_sum[1m]) / rate(http_request_duration_seconds_count[1m])
💡 Практика: что делать дальше
- Развернуть Prometheus и Node Exporter (можно через Helm: );
helm install prometheus prometheus-community/prometheus
- Настроить — указать источники метрик;
prometheus.yml
- Подключить Grafana и выбрать Prometheus как data source;
- Создать дашборды или использовать готовые (например, Node Exporter Full).
🚨 Пример alert-правил (alertrules.yaml
)
alertrules.yaml
groups: - name: node-alerts rules: - alert: HighCPUUsage expr: avg by(instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.85 for: 2m labels: severity: warning annotations: summary: "Высокая загрузка CPU на {{ $labels.instance }}" description: "CPU usage > 85% в течение 2 минут." - alert: InstanceDown expr: up == 0 for: 1m labels: severity: critical annotations: summary: "Экземпляр {{ $labels.instance }} недоступен" description: "Инстанс не отвечает на опросы Prometheus более 1 минуты."
📌 Эти правила:
- Сигнализируют о высоком CPU (выше 85%);
- Отслеживают недоступность узла;
- Отправляют метаданные (,
summary
) в Alertmanager.description
Подключается в
prometheus.yml
rule_files: - "alertrules.yaml"
📊 Сравнение систем мониторинга
Характеристика | Prometheus | Grafana Loki | Zabbix | Datadog |
---|---|---|---|---|
Тип данных | Метрики (time series) | Логи | Метрики, логи, триггеры | Метрики, логи, трассировки |
Язык запросов | PromQL | LogQL | Нативные выражения | Проприетарный |
Хранение | Встроенная TSDB | Встроенное (BoltDB+chunks) | СУБД (MySQL/PostgreSQL) | Облако |
Интерфейс | Веб UI + Grafana | Через Grafana | Веб UI | Веб-интерфейс |
Alerting | Через Alertmanager | Через Prometheus/Alertmanager | Встроенный | Встроенный |
Поддержка Kubernetes | Отличная (SD + exporters + Helm) | Отличная (через fluent-bit promtail | Ограниченная | Отличная (через агенты + интеграции) |
Модель лицензирования | Open Source (Apache 2.0) | Open Source | Open Source / Enterprise | SaaS (платно) |
Установка | Простой (один бинарник / Helm) | Быстрая (Helm или binary) | Более сложная | Без установки (облачный агент) |
Кейс: локальный кластер | ✅ Полный контроль | ✅ Для логов | ✅ Но требует настройки СУБД | ⚠️ Ограничено |
Кейс: enterprise-cloud | ✅ Через Thanos, Cortex | ✅ В связке с Prometheus | ⚠️ Меньше гибкости | ✅ Сильная поддержка |