В мире DevOps и системного администрирования слепота — это роскошь, которую никто не может себе позволить. Мониторинг серверов превратился из удобной опции в критическую необходимость, а связка Prometheus и Grafana стала де-факто стандартом для сбора, хранения и визуализации метрик. Эта статья проведет вас через весь путь — от базовых концепций до создания информативных дашбордов, которые позволят вам видеть состояние вашей инфраструктуры как на ладони.
Что такое Prometheus и почему он так популярен?
Prometheus — это система мониторинга и оповещения с открытым исходным кодом, изначально разработанная в SoundCloud. В отличие от многих legacy-систем, Prometheus использует pull-модель: он сам периодически опрашивает заданные цели (targets) по HTTP, собирая метрики. Данные хранятся в виде временных рядов (time series) в эффективном внутреннем формате.
Ключевая философия Prometheus — многомерность данных. Каждая метрика идентифицируется именем и набором пар ключ-значение (labels), что позволяет гибко фильтровать и агрегировать данные.
Архитектура Prometheus: основные компоненты
- Prometheus Server: ядро системы, отвечает за сбор, хранение и запрос данных.
- Pushgateway: промежуточное звено для кратковременных задач (jobs), которые не могут использовать pull-модель.
- Exporters: агенты, которые переводят метрики приложений или систем в формат, понятный Prometheus (Node Exporter для железа, Blackbox Exporter для проверок).
- Alertmanager: отдельный сервис для обработки, группировки и отправки алертов (в Telegram, Slack, email).
- Service Discovery: автоматическое обнаружение целей в облачных средах (Kubernetes, Consul, AWS).
Практическая настройка Prometheus: с нуля до работающей системы
Установка обычно начинается с загрузки бинарных файлов с официального сайта или использования пакетного менеджера. Основной файл конфигурации — prometheus.yml — это сердце вашей настройки.
Пример базового конфигурационного файла prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
rule_files:
- \"rules.yml\"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['server1:9100', 'server2:9100']
После запуска сервера (./prometheus --config.file=prometheus.yml) интерфейс станет доступен на порту 9090, где вы сможете выполнять запросы на языке PromQL.
Grafana: превращаем данные в понимаемые дашборды
Собранные метрики — это лишь сырые данные. Grafana — это платформа визуализации, которая превращает цифры в интерактивные графики, диаграммы и панели. После установки Grafana (часто через Docker или пакеты) первым шагом является добавление источника данных (Data Source) — вашего Prometheus-сервера.
Используйте официальные дашборды из Grafana Dashboards (например, №1860 для Node Exporter) как отправную точку. Их можно импортировать по ID, что сэкономит часы ручной настройки.
Создание своего первого полезного дашборда
- Создайте новый дашборд и добавьте панель (Panel).
- В качестве запроса (Query) используйте PromQL-выражение, например:
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)для загрузки CPU. - Настройте визуализацию (график, статистика, таблица).
- Добавьте аннотации, пороги (thresholds) и условное форматирование.
- Не забудьте дать панели понятное название и описание.
Мониторинг реальных сервисов: от веб-серверов до баз данных
Для мониторинга конкретных сервисов используются экспортеры. Например, для мониторинга веб-сервера Nginx потребуется установить nginx-prometheus-exporter, который парсит статус-страницу. Для MySQL — mysqld_exporter. Конфигурация Prometheus дополняется новыми job_name в scrape_configs, указывающими на адреса этих экспортеров.
Настройка алертинга: от простого уведомления до сложных сценариев
Правила алертинга (alerting rules) определяются в отдельном YAML-файле (например, rules.yml), на который ссылается prometheus.yml. Пример правила для оповещения о высокой загрузке диска:
groups:
- name: disk_alerts
rules:
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes{mountpoint=\"/\"} / node_filesystem_size_bytes{mountpoint=\"/\"}) * 100 < 10
for: 5m
labels:
severity: warning
annotations:
summary: \"На ноде {{ $labels.instance }} заканчивается место на диске\"
Alertmanager затем обрабатывает эти алерты, применяя группировку, подавление (inhibition) и маршрутизацию по каналам.
Продвинутые практики и оптимизация
- Репликация и High Availability: запуск двух идентичных экземпляров Prometheus с общим хранилищем.
- Долгосрочное хранение: интеграция с Thanos или Cortex для хранения данных за месяцы и годы.
- Безопасность: настройка TLS, аутентификации через reverse proxy (например, Nginx с Basic Auth) и ограничение доступа к API.
- Оптимизация запросов: использование recording rules для предварительного вычисления дорогостоящих запросов PromQL.
FAQ: Часто задаваемые вопросы
В чем основное отличие Prometheus от Zabbix или Nagios?
Prometheus использует pull-модель и многомерную модель данных, ориентирован на облачные и динамические среды, в то время как Zabbix традиционно использует push/агентов и имеет более монолитную архитектуру.
Можно ли использовать Grafana без Prometheus?
Да, Grafana поддерживает десятки источников данных (Data Sources): от Graphite и InfluxDB до облачных мониторинговых систем и баз данных.
Как мониторить Windows-сервера?
Используйте Windows Exporter (ранее WMI Exporter). Установите его как службу, и он предоставит метрики по CPU, памяти, дискам и процессам в формате Prometheus.
Prometheus подходит для мониторинга бизнес-метрик?
Да, его можно использовать для счета событий (например, количество заказов) через инструментацию вашего приложения с помощью клиентских библиотек (для Go, Python, Java и др.).
Как организовать хранение данных более 15 дней?
По умолчанию Prometheus хранит данные 15 дней. Для увеличения срока нужно настроить флаг --storage.tsdb.retention.time (например, 90d) или использовать внешние решения для долгосрочного хранения.