Баннер мобильный (3) Пройти тест

Prometheus + Alertmanager: метрики, алерты и базовый мониторинг сервиса

Настраиваем правильную систему мониторинга

Разбор

30 июня 2026

Поделиться

Скопировано
Prometheus + Alertmanager: метрики, алерты и базовый мониторинг сервиса

Содержание

    Представьте ситуацию: вы выкатили новый микросервис в продакшен, легли спать, а утром получили гневные письма от пользователей из-за того, что сервис не работает уже несколько часов. Без грамотной системы оповещения вы узнаете о сбоях последним. Именно поэтому мониторинг сервисов — это не просто красивые графики и таблицы, а фундамент стабильности любого IT-продукта.

    В этой статье разберем золотой стандарт индустрии — связку Prometheus и Alertmanager. Если первый отвечает за сбор данных, то второй берет на себя оповещение и коммуникацию с инженерами. Мы пройдем путь от теории до практики: настроим prometheus monitoring, подключим уведомления в Telegram и обсудим подводные камни, о которых часто молчат в базовых туториалах.

    Что такое Prometheus

    Prometheus — это система с открытым кодом для мониторинга и сбора метрик, которая хранит данные в виде временных рядов (time series). В отличие от систем логирования, она не хранит строки кода или события. Она оперирует числами: сколько запросов пришло, какая была задержка и сколько памяти использовало приложение.

    Отвечая на вопрос, что это такое с архитектурной точки зрения, скажем: Prometheus — это TSDB (база данных временных рядов) с мощным вычислительным движком PromQL внутри, который позволяет анализировать состояние сервисов в реальном времени.

    Что такое Alertmanager

    Сам по себе сборщик метрик не умеет отправлять сообщения в мессенджеры. Здесь на сцену выходит Alertmanager — неотъемлемый компонент экосистемы, который обрабатывает алерты.

    Грамотный Alertmanager умеет:

    • группировать тысячи сработавших ошибок в одно сообщение (например, если упал коммутатор и отвалились 50 серверов);
    • подавлять уведомления (inhibit) — если отключили весь дата-центр, вам не нужны уведомления о недоступности каждого отдельного микросервиса;
    • маршрутизировать сообщения — критические ошибки идут в PagerDuty с вызовом на телефон, а предупреждения прилетают в общий Slack-канал.

    Как работает связка Prometheus + Alertmanager

    Давайте посмотрим на классический сценарий обработки инцидента:

    1. Сервис отдает метрики (обычно на эндпоинте /metrics).
    2. Prometheus собирает их с заданным интервалом —этот процесс обозначен как scrape (pull-модель).
    3. Правила (alert rules) на сервере постоянно анализируют поступающие данные.
    4. При срабатывании условия (например, если CPU > 90% дольше 5 минут) создается алерт.
    5. Alertmanager принимает алерты, применяет фильтры и шаблоны, а потом отправляет их инженерам.

    Как установить Prometheus

    Рассмотрим базовый сценарий — установку Prometheus на чистый сервер с Ubuntu.

    # Скачиваем архивwget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz# Распаковываем и запускаемtar xvf prometheus-2.45.0.linux-amd64.tar.gzcd prometheus-2.45.0.linux-amd64./prometheus

    По умолчанию Prometheus работает на порту 9090. Открыв браузер по адресу http://your-server-ip:9090, вы попадете в интерфейс Prometheus, где уже можно выполнять базовые запросы. Конечно, в продакшене Prometheus обычно устанавливают через systemd-юниты или Docker, но для понимания сути можно воспользоваться прямым скачиванием.

    Структура конфигурации Prometheus (prometheus.yml)

    Сердце системы — файл prometheus.yml. Разберем базовый конфиг Prometheus:

    global: scrape_interval: 15s
    scrape_configs: - job_name: 'my_app'   static_configs:     - targets: ['localhost:8080', '192.168.1.50:8080']
    • global — задает глобальные параметры;
    • scrape_interval — стандартный prometheus scrape interval, который равен 15 секундам (уменьшать его без нужды не стоит — это резко повышает нагрузку на диск);
    • targets — массив адресов, по которым система будет ходить за данными.

    Этот простой prometheus.yml покрывает 80% потребностей небольших проектов, интуитивно понятен и легко версионируется в Git.

    Как Prometheus собирает метрики

    В отличие от push-моделей (как у Graphite), здесь используется, как уже упомянули выше, pull-модель. Инициатором всегда выступает сам сервер.

    • Endpoint /metrics — ваше приложение должно отдавать данные в специальном текстовом формате;
    • Exporters — если сервис не умеет отдавать метрики сам (например, PostgreSQL или Nginx), рядом с ним ставится крошечный процесс-экспортер, который транслирует данные в нужный формат.

    Как настроить alert rules в Prometheus

    Правила описываются в отдельных YAML-файлах и подключаются через главный конфиг. Разберем классические alert rules:

    groups:- name: instance_health rules: - alert: HighCPUUsage   expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80   for: 5m   labels:     severity: warning   annotations:     summary: "Высокая нагрузка на CPU (инстанс {{ $labels.instance }})"     description: "Загрузка процессора превышает 80% уже 5 минут."

    Здесь мы используем язык PromQL для расчета метрики. Грамотные алерты всегда содержат блок for (чтобы не реагировать на секундные скачки) и информативные annotations. Именно так и строится современная система оповещений.

    Как установить и настроить Alertmanager

    Alertmanager запускается отдельным процессом и имеет свой конфиг (alertmanager.yml). Чтобы связать их, настройка prometheus требует добавления блока alerting в prometheus.yml:

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

    Alertmanager + Telegram: настраиваем шаблоны

    Отправка уведомлений в Telegram — один из самых популярных сценариев.

    route: receiver: 'telegram-notifications'
    receivers:- name: 'telegram-notifications' telegram_configs: - bot_token: 'YOUR_BOT_TOKEN'   chat_id: 123456789   message: '{{ template "telegram.custom.message" . }}'

    Чтобы алерты были читаемыми, используйте alertmanager.tmpl. Через Go Template можно красиво свернуть массив сработавших алертов в один аккуратный пост с эмодзи и ссылками на Grafana.

    Запуск через Docker Compose

    Для локальной разработки или небольших стендов идеально подходит Docker Compose:

    version: '3.8'services: prometheus:   image: prom/prometheus:latest   ports:     - "9090:9090"   volumes:     - ./prometheus.yml:/etc/prometheus/prometheus.yml
     alertmanager:   image: prom/alertmanager:latest   ports:     - "9093:9093"

    Такой подход избавляет от необходимости возиться с правами доступа. Полноценная установка Prometheus и настройка через Docker Compose занимает не больше пяти минут.

    Как пользоваться Prometheus: Web UI и PromQL

    Итак, как пользоваться Prometheus после установки? Зайдите во вкладку Graph. Введите простой запрос up, и вы увидите статус всех ваших целей (1 — работает, 0 — не работает).

    Рассмотрим функции:

    • rate: rate(http_requests_total[5m]) — показывает скорость роста счетчика в секунду;
    • sum: sum(rate(...)) by (status) — агрегирует данные по кодам ответа.

    Именно PromQL делает связку такой мощной, позволяя на лету конструировать метрики, которых физически нет в приложении.

    Federation в Prometheus

    Когда инфраструктура разрастается, один сервер перестает справляться. На помощь приходит Federation.

    Суть проста: несколько локальных Prometheus-серверов собирают детальную метрику в своих кластерах, а один глобальный сервер забирает у них только агрегированные (суммарные) данные. Это позволяет масштабировать охват инструмента на тысячи узлов без потери производительности.

    Преимущества и ограничения

    Давайте объективно взглянем на инструмент через призму плюсов и минусов.

    Преимущества
    Ограничения
    ПО с открытым кодом (Open Source)
    Хранит только метрики (не заменяет ELK для логов и Jaeger для трейсов)
    PromQL — невероятно мощный язык запросов
    Кардинальность (High Cardinality): если генерировать уникальные лейблы на каждый запрос, TSDB не выдержит нагрузки
    Гибкий алертинг с группировкой и подавлением
    Долгое хранение: из коробки данные хранятся локально и недолго (нужны надстройки вроде Thanos или VictoriaMetrics)
    Масштабируемость через Federation
    Требует квалификации: порог входа в PromQL выше, чем в Click-ops-системах

    Частые ошибки при настройке

    1. Слишком агрессивный scrape interval: опрашивать цели раз в секунду нужно только в экстренных случаях, иначе диск умрет от IOPS.
    2. Отсутствие for в правилах: мгновенные сетевые лаги будут генерировать сотни ложных срабатываний.
    3. Плохая структура метрик: использование URL-путей с ID (/user/12345) в качестве лейблов метрик приводит к бесконечному росту временных рядов.
    4. Настроенный, но не подключенный Alertmanager: правила сработают, но никто не узнает об инциденте.

    Prometheus и Alertmanager: коротко о главном

    Prometheus собирает метрики, Alertmanager отправляет алерты. Вместе они образуют фундамент современного мониторинга в IT.

    Чтобы эффективно настроить сервис:

    • используйте pull-модель и экспортеры для сбора данных;
    • пишите осмысленные alert rules с задержкой (for) и понятными annotations;
    • помните о кардинальности метрик и не храните в TSDB то, что должно лежать в логах;
    • для долгого хранения и глобального обзора используйте Federation или связку с VictoriaMetrics/Thanos.

    Теперь вы не просто знаете, как поднять базовый стек мониторинга, а понимаете, как делать это безопасно, эффективно и масштабируемо. Проектируйте мониторинг как систему, тестируйте алерты в лабораторной среде и не бойтесь экспериментировать с PromQL. Это превращает набор технологий в инженерный актив, а не в источник случайных отказов!

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии