Prometheus — open-source система мониторинга и алертинга, написанная на Go. Разработана в SoundCloud в 2012 году, передана в CNCF (Cloud Native Computing Foundation) в 2016 году. Собирает метрики через HTTP-эндпоинты (/metrics), хранит в локальной TSDB и предоставляет язык запросов PromQL. Де-факто стандарт мониторинга в Kubernetes-окружениях.
Архитектура Prometheus
Модель работы — pull-based: Prometheus сам опрашивает (scrape) целевые сервисы по расписанию (обычно каждые 15–30 секунд). Это отличает его от push-систем (StatsD, InfluxDB с telegraf) и упрощает обнаружение отказов — если сервис перестал отвечать, это видно сразу.
Компоненты экосистемы:
- Prometheus Server — основной процесс: scraping, хранение TSDB, вычисление alerting rules
- Alertmanager — маршрутизация алертов в PagerDuty, Slack, email; дедупликация и группировка
- Pushgateway — для кратковременных задач (cron jobs), живущих короче периода scraping
- Exporters — агенты для систем без нативной поддержки: node_exporter (CPU, RAM, диски), nginx-prometheus-exporter, postgres_exporter, blackbox_exporter
PromQL — язык запросов
PromQL позволяет вычислять производные метрики в реальном времени. Примеры:
- Нагрузка CPU:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) - Свободная RAM в %:
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 - RPS сервера:
rate(http_requests_total[1m]) - Диск заполнен более 85%:
node_filesystem_free_bytes / node_filesystem_size_bytes * 100 < 15
Алертинг настраивается через rules-файлы: при выполнении PromQL-условия дольше заданного времени (for: 5m) Alertmanager получает fire-событие и отправляет уведомление.
История
Prometheus создали Мэтт Прауд (Matt Proud) и Джулиус Вольц (Julius Volz) в SoundCloud в 2012 году. Вдохновлён системой Borgmon из Google (внутренняя, не открытая). В 2016 году передан в CNCF и стал вторым после Kubernetes incubating-проектом. В 2018 году достиг статуса Graduated (зрелый проект CNCF). В 2022 году выпущен Prometheus 2.40 с улучшенной производительностью TSDB.
Prometheus в хостинге
Для VPS и выделенных серверов минимальный стек: Prometheus + node_exporter + Grafana. node_exporter устанавливается на каждый целевой сервер и экспортирует системные метрики на порту 9100. Grafana подключается к Prometheus как datasource и отображает готовые дашборды (ID 1860 — Node Exporter Full, самый популярный). Весь стек разворачивается за 30 минут через Docker Compose.
Для долгосрочного хранения метрик (более 15 дней) используют VictoriaMetrics или Thanos как remote storage. По сравнению с Nagios, Prometheus не требует установки агентов: достаточно добавить /metrics эндпоинт в приложение или запустить exporter.
Мониторинг хостинга: что отслеживать
Для типичного VPS рекомендуемый минимальный набор метрик Prometheus через node_exporter: загрузка CPU (iowait > 30% — признак проблем с диском), использование оперативной памяти, свободное место на диске (< 15% — критично), IOPS (операции ввода-вывода), сетевой трафик (bytes in/out), количество TCP-соединений. Алерты настраиваются в Alertmanager: при disk_free < 10% — warning, < 5% — critical.
Ключевые метрики для мониторинга серверов
Обязательный минимум метрик для мониторинга через node_exporter:
- CPU:
node_cpu_seconds_total— нагрузка по ядрам и режимам (user, system, iowait) - RAM:
node_memory_MemAvailable_bytes— свободная память; алерт при <10% - Диск:
node_filesystem_free_bytes— свободное место; алерт при <15% - Сеть:
node_network_receive_bytes_totalиnode_network_transmit_bytes_total— входящий и исходящий трафик - Нагрузка:
node_load1— средняя нагрузка за 1 минуту
Для алертинга на уровне сервиса: prometheus_http_requests_total (HTTP RPS и коды ответов), process_open_fds (открытые файловые дескрипторы — признак утечки ресурсов). Интеграция с PagerDuty через Alertmanager настраивается за 10 минут и обеспечивает немедленное уведомление дежурного при сработавшем алерте.