Prometheus и Grafana: Полное руководство по мониторингу серверов от установки до дашбордов

Prometheus и Grafana: Полное руководство по мониторингу серверов от установки до дашбордов

В мире 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, что сэкономит часы ручной настройки.

Создание своего первого полезного дашборда

  1. Создайте новый дашборд и добавьте панель (Panel).
  2. В качестве запроса (Query) используйте PromQL-выражение, например: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100) для загрузки CPU.
  3. Настройте визуализацию (график, статистика, таблица).
  4. Добавьте аннотации, пороги (thresholds) и условное форматирование.
  5. Не забудьте дать панели понятное название и описание.

Мониторинг реальных сервисов: от веб-серверов до баз данных

Для мониторинга конкретных сервисов используются экспортеры. Например, для мониторинга веб-сервера 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) или использовать внешние решения для долгосрочного хранения.