Prometheus — это не просто «еще одна система мониторинга», а такой рабочий стандарт для сбора метрик с временными рядами. Его любят за то, что он надёжен, довольно простой в установке и хорошо дружит с современными распределенными системами — микросервисы, Kubernetes, облака и прочий зоопарк.
У него под капотом есть собственная time-series база, язык запросов PromQL и встроенный механизм алертинга. Он спокойно переваривает метрики с тысяч приложений, серверов, контейнеров, экспортеров и даже облачных API.
Что входит в Prometheus #
- Time Series DB — встроенное хранилище, заточенное под метрики с временными метками. Никаких внешних баз по умолчанию не надо.
- PromQL — язык запросов, которым ты считаешь средние значения, процентили, аггрегируешь метрики, фильтруешь по лейблам и так далее прямо на лету.
- Alertmanager — отдельный сервис, который принимает алерты от Prometheus и уже сам решает, куда и как их отправить.
- Exporters — маленькие агенты/сервисы, которые отдают метрики в формате Prometheus: Node Exporter, Blackbox Exporter, PostgreSQL Exporter и десятки других.
- Service Discovery — пром умеет сам находить таргеты в Kubernetes, EC2, Consul и других системах, не надо руками прописывать каждый хост.
Что вообще можно мониторить #
- Железо: CPU, память, диск, сетевой трафик.
- Сервисы: время ответа, количество ошибок, таймауты, ретраи.
- Бизнес- или кастомные метрики, которые приложение само отдает по HTTP на
/metrics. - Kubernetes: поды, ноды, namespace, ingress, контейнеры и т.д.
- Инфраструктурные штуки: CI/CD, базы данных, брокеры сообщений, очереди и прочее.
Grafana и Prometheus #
У Prometheus есть свой минималистичный веб-интерфейс, но в проде почти всегда ставят Grafana поверх. Grafana подключается к Prometheus как к источнику данных и уже там рисуют графики, таблицы, дашборды и настраивают визуальный alerting.
Почему Prometheus стал «дефолтом» #
- Можно снимать метрики с хорошей детализацией и потом крутить их как угодно в PromQL.
- Развернуть базовую инсталляцию — это по сути один бинарник или Helm-чарт.
- С Kubernetes он дружит нативно: autodiscovery, экспортеры, куча готовых чаров.
- Open Source, активно развивается, экосистема огромная.
- Есть Pushgateway и механизмы federation, чтобы строить более сложные схемы сбора метрик по нескольким уровням.
Поэтому Prometheus очень органично ложится на микросервисы, event-driven-архитектуры и облака, где важно быстро увидеть деградацию и не ждать, пока тебе позвонит пользователь.
Минимальный пример конфига 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 секунд.
- Отдельный job для Node Exporter — собирает системные метрики с хоста.
- Отдельный job для пользовательского приложения, которое отдает метрики на
/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-чарт
prometheus-community/prometheus). - Описать в
prometheus.yml, что и откуда скрейпить. - Поставить Grafana и добавить Prometheus как data source.
- Подтянуть пару готовых дашбордов под Node Exporter, Kubernetes и свои приложения.
Пример 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%;
- отмечают инстанс как упавший, если он перестал отвечать на scrape-запросы.
Подключается это в конфиге Prometheus строкой:
rule_files:
- "alertrules.yaml"
Краткое сравнение с другими системами #
Если грубо сравнить решения для наблюдаемости: Prometheus — это про метрики и алерты, Loki — про логи, Zabbix — классический монолитный мониторинг, Datadog — мощный SaaS, который умеет всё сразу (метрики, логи, трассировки), но за деньги. Prometheus хорошо заходит там, где есть Kubernetes и хочется максимум контроля у себя, а не в облачном сервисе.
