// Engineering Log

Мониторинг: Часть 3 — Prometheus, Node Exporter и Grafana

Опубликовано 22.09.2026

// Быстрый маршрут

Эта статья относится к теме Деплой и стабильная работа.

Prometheus — система мониторинга и база данных временных рядов с открытым исходным кодом (лицензия Apache 2.0). Её создали в компании SoundCloud в 2012 году, а в 2016-м проект вошёл в Cloud Native Computing Foundation вторым после Kubernetes. Версия 3.0 вышла в ноябре 2024 года; на сентябрь 2026 года актуальна 3.14, а 3.13 объявлена выпуском с долгосрочной поддержкой (LTS).

Prometheus обычно используют вместе с Node Exporter, который отдаёт метрики Linux-сервера, Alertmanager, который рассылает оповещения, и Grafana, в которой строят панели.

Как работает Prometheus

Главная особенность — модель pull: Prometheus сам с заданным интервалом обращается к целям по HTTP и забирает метрики в текстовом формате. Каждая метрика — это имя и набор меток, например node_cpu_seconds_total{cpu="0",mode="idle"}. Метки позволяют фильтровать и группировать данные в запросах.

Компоненты экосистемы:

  • Prometheus Server — собирает метрики, хранит их на локальном диске, выполняет запросы на языке PromQL и проверяет правила оповещений.
  • Экспортеры — программы, которые переводят данные системы в формат Prometheus: node_exporter для серверов, postgres_exporter и mysqld_exporter для баз данных, blackbox_exporter для проверки сайтов и портов извне.
  • Alertmanager — принимает сработавшие оповещения, группирует их, подавляет повторы и отправляет в Telegram, на почту или в сервис дежурств.
  • Pushgateway — промежуточный узел для коротких задач, например ночного резервного копирования, которые завершаются раньше, чем Prometheus успеет их опросить.

Минимальная установка

Node Exporter запускают на каждом сервере; по умолчанию он отдаёт метрики на порту 9100. Сам Prometheus читает конфигурацию из prometheus.yml:

yaml
global:
  scrape_interval: 30s
  evaluation_interval: 30s

rule_files:
  - /etc/prometheus/rules/*.yml

alerting:
  alertmanagers:
    - static_configs:
        - targets: ["localhost:9093"]

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: node
    static_configs:
      - targets:
          - "192.0.2.21:9100"
          - "192.0.2.22:9100"

Порт 9100 должен быть доступен только серверу Prometheus: метрики раскрывают многое об устройстве системы.

Правило оповещения

Правила хранятся в отдельных файлах. Пример двух типовых правил — сервер не отвечает и заканчивается место на диске:

yaml
groups:
  - name: node
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "{{ $labels.instance }} не отвечает 5 минут"

      - alert: DiskSpaceLow
        expr: |
          node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"}
            / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"} < 0.10
        for: 15m
        labels:
          severity: warning
        annotations:
          summary: "{{ $labels.instance }}: свободно меньше 10 % на {{ $labels.mountpoint }}"

Параметр for задаёт, сколько условие должно держаться до срабатывания, — это отсекает кратковременные всплески. Файл правил перед применением проверяют командой promtool check rules.

Маршрут в Alertmanager

Alertmanager решает, кому и как отправить оповещение. Критические — сразу в Telegram, остальные — на почту с группировкой:

yaml
route:
  receiver: email
  group_by: ["alertname", "instance"]
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  routes:
    - receiver: telegram
      matchers:
        - severity="critical"
      group_wait: 10s

receivers:
  - name: email
    email_configs:
      - to: "admin@example.ru"
  - name: telegram
    telegram_configs:
      - bot_token: "ТОКЕН_БОТА"
        chat_id: 123456789

Для отправки почты в блоке global дополнительно указывают SMTP-сервер (smtp_smarthost, smtp_from и учётные данные).

Grafana

У Prometheus есть простой встроенный интерфейс для запросов, но панели строят в Grafana. Она подключает Prometheus как источник данных, поддерживает десятки других источников и позволяет собирать интерактивные панели с переменными и оповещениями. Для Node Exporter есть готовые панели в каталоге Grafana, их импортируют по номеру.

С апреля 2021 года Grafana распространяется под лицензией AGPLv3 (до этого — Apache 2.0). Для внутреннего использования это ничего не меняет, но если вы изменяете код Grafana и предоставляете её как сервис другим, изменения придётся открыть.

Достоинства

  • PromQL. Гибкий язык запросов: скорости изменения, процентили, агрегация по меткам.
  • Экспортеры почти для всего. Базы данных, веб-серверы, очереди, сетевое оборудование по SNMP.
  • Обнаружение целей. Prometheus сам находит цели в Kubernetes, Consul, облаках и по DNS.
  • Зрелые оповещения. Alertmanager умеет группировать, подавлять и маршрутизировать уведомления.
  • Правила записи. Тяжёлые запросы можно заранее считать и сохранять как новые метрики.

Недостатки

  • Порог входа. Нужно освоить конфигурацию, PromQL и устройство меток.
  • Локальное хранение. По умолчанию данные хранятся 15 дней на диске одного сервера. Для долгого хранения и нескольких серверов Prometheus используют внешние хранилища: VictoriaMetrics, Thanos, Mimir.
  • Модель pull. Цели за NAT или в изолированных сетях опрашивать трудно; выручают агенты с отправкой данных (remote write) или Pushgateway.
  • Высокая кардинальность. Метки с уникальными значениями — идентификаторами пользователей, полными URL — резко увеличивают число рядов и расход памяти.

Типичные ошибки

  • Уникальные значения в метках. Главная причина переполнения памяти. В метки выносят только то, по чему действительно группируют.
  • Нет задержки for. Оповещения срабатывают на каждый секундный всплеск.
  • Мониторинг без проверки самого мониторинга. Если упал Prometheus, оповещений не будет. Нужна внешняя проверка доступности или второй экземпляр.
  • Экспортеры открыты в интернет. Порт 9100 без ограничения доступа раскрывает версии, разделы дисков и сетевые интерфейсы.

// Похожая задача

Если у вас похожая ситуация

Эта статья относится к одной из рабочих тем. Можно продолжить чтение по теме, перейти на главную, чтобы понять, чем я занимаюсь, или сразу открыть услуги.

Тема статьи

Деплой и стабильная работа

Docker, CI/CD, релизы, мониторинг, observability и разбор инцидентов.

Часто с этим приходят

  • Настроить деплой без ручных действий и хаоса
  • Подключить мониторинг, алерты и базовую observability
  • Разобрать инциденты и стабилизировать production

// Следующий шаг

Если вам нужна не только статья, а помощь по этой теме, удобнее сразу перейти в услугу. Главная и подборка материалов остаются рядом.

Открыть услуги

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Написать в Telegram

Отвечаю в течение рабочего дня (03:00–13:00 GMT)

Или оставьте заявку здесь:

Подтвердите, что вы не бот.

Написать и получить быстрый ответ