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)
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
/metricsу пользовательского приложения (например, Go, Python, Java).
🔎 Примеры 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)
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,description) в Alertmanager.
Подключается в 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 | ⚠️ Меньше гибкости | ✅ Сильная поддержка |