Представьте ситуацию: вы выкатили новый микросервис в продакшен, легли спать, а утром получили гневные письма от пользователей из-за того, что сервис не работает уже несколько часов. Без грамотной системы оповещения вы узнаете о сбоях последним. Именно поэтому мониторинг сервисов — это не просто красивые графики и таблицы, а фундамент стабильности любого IT-продукта.
В этой статье разберем золотой стандарт индустрии — связку Prometheus и Alertmanager. Если первый отвечает за сбор данных, то второй берет на себя оповещение и коммуникацию с инженерами. Мы пройдем путь от теории до практики: настроим prometheus monitoring, подключим уведомления в Telegram и обсудим подводные камни, о которых часто молчат в базовых туториалах.
Что такое Prometheus
Prometheus — это система с открытым кодом для мониторинга и сбора метрик, которая хранит данные в виде временных рядов (time series). В отличие от систем логирования, она не хранит строки кода или события. Она оперирует числами: сколько запросов пришло, какая была задержка и сколько памяти использовало приложение.
Отвечая на вопрос, что это такое с архитектурной точки зрения, скажем: Prometheus — это TSDB (база данных временных рядов) с мощным вычислительным движком PromQL внутри, который позволяет анализировать состояние сервисов в реальном времени.
Что такое Alertmanager
Сам по себе сборщик метрик не умеет отправлять сообщения в мессенджеры. Здесь на сцену выходит Alertmanager — неотъемлемый компонент экосистемы, который обрабатывает алерты.
Грамотный Alertmanager умеет:
- группировать тысячи сработавших ошибок в одно сообщение (например, если упал коммутатор и отвалились 50 серверов);
- подавлять уведомления (inhibit) — если отключили весь дата-центр, вам не нужны уведомления о недоступности каждого отдельного микросервиса;
- маршрутизировать сообщения — критические ошибки идут в PagerDuty с вызовом на телефон, а предупреждения прилетают в общий Slack-канал.
Как работает связка Prometheus + Alertmanager
Давайте посмотрим на классический сценарий обработки инцидента:
- Сервис отдает метрики (обычно на эндпоинте /metrics).
- Prometheus собирает их с заданным интервалом —этот процесс обозначен как scrape (pull-модель).
- Правила (alert rules) на сервере постоянно анализируют поступающие данные.
- При срабатывании условия (например, если CPU > 90% дольше 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-серверов собирают детальную метрику в своих кластерах, а один глобальный сервер забирает у них только агрегированные (суммарные) данные. Это позволяет масштабировать охват инструмента на тысячи узлов без потери производительности.
Преимущества и ограничения
Давайте объективно взглянем на инструмент через призму плюсов и минусов.
Частые ошибки при настройке
- Слишком агрессивный scrape interval: опрашивать цели раз в секунду нужно только в экстренных случаях, иначе диск умрет от IOPS.
- Отсутствие for в правилах: мгновенные сетевые лаги будут генерировать сотни ложных срабатываний.
- Плохая структура метрик: использование URL-путей с ID (/user/12345) в качестве лейблов метрик приводит к бесконечному росту временных рядов.
- Настроенный, но не подключенный Alertmanager: правила сработают, но никто не узнает об инциденте.
Prometheus и Alertmanager: коротко о главном
Prometheus собирает метрики, Alertmanager отправляет алерты. Вместе они образуют фундамент современного мониторинга в IT.
Чтобы эффективно настроить сервис:
- используйте pull-модель и экспортеры для сбора данных;
- пишите осмысленные alert rules с задержкой (for) и понятными annotations;
- помните о кардинальности метрик и не храните в TSDB то, что должно лежать в логах;
- для долгого хранения и глобального обзора используйте Federation или связку с VictoriaMetrics/Thanos.
Теперь вы не просто знаете, как поднять базовый стек мониторинга, а понимаете, как делать это безопасно, эффективно и масштабируемо. Проектируйте мониторинг как систему, тестируйте алерты в лабораторной среде и не бойтесь экспериментировать с PromQL. Это превращает набор технологий в инженерный актив, а не в источник случайных отказов!
