В современном мире IT-инфраструктура редко состоит из одного-двух серверов. Даже небольшой проект сегодня может включать в себя десятки виртуальных машин, контейнеров, баз данных, балансировщиков нагрузки и микросервисов. Чем сложнее система — тем выше вероятность сбоев, причем они могут происходить в самый неподходящий момент: ночью, в выходные или во время важного релиза.
Мониторинг IT-инфраструктуры и приложений играет важную роль при возникновении сбоев. Простого сбора метрик и красивых графиков уже недостаточно. Необходимо также оперативно получать уведомления при их возникновении. Для таких целей существует Alertmanager — отдельный компонент экосистемы Prometheus, который берет на себя всю логику работы с уведомлениями:
- дедупликацию одинаковых алертов,
- группировку связанных событий,
- гибкую маршрутизацию по уровню критичности, командам и времени,
- возможность отправки уведомлений в различные популярные системы оповещения.
Сегодня мы рассмотрим настройку алертов при помощи Alertmanager и их отправку в Telegram-канал.
В результате вы получите готовое, проверенное и легко масштабируемое решение, которое можно сразу использовать в боевой среде — будь то несколько виртуальных машин в облаке или целая Kubernetes-среда из сотен нод.
Предварительные требования
Для работы нам понадобятся:
-
Два облачных сервера с дистрибутивом Linux Ubuntu 24.04.
-
Установленные Docker и Docker Compose на одном из серверов.
-
Telegram-бот и канал — ниже расскажем, как их создать.
Для серверов выберите конфигурацию с одноядерным процессором, 1 ГБ оперативной памяти, 15 ГБ места на NVMe-диске и публичным IPv4-адресом, который можно заказать при создании сервера или в разделе «Сеть».
Серверы будет установлены в течение пары минут. IPv4-адрес, логин и пароль для подключения по протоколу SSH будут доступны в разделе «Дашборд» для каждого из серверов.
Описание Alertmanager
Alertmanager — это компонент с открытым исходным кодом, который работает с уведомлениями, созданными клиентами, например, Prometheus. Его основная цель — принимать, обрабатывать и отправлять уведомления об алертах (оповещениях) конечным получателям.
По умолчанию Alertmanager умеет отправлять уведомления на адрес электронной почты, а также в Slack, PagerDuty, OpsGenie и множество других систем. Однако один из самых популярных и удобных методов для получения уведомлений — это Telegram. Получать уведомления можно прямо в чат или группу; дополнительно поддерживаются языки разметки Markdown и HTML.
Создание бота в Telegram
Прежде чем приступать к настройке Alertmanager, создадим бота и канал в Telegram.
1) Открываем бота BotFather.
2) Отправляем команду /newbot для создания нового бота:

3) Необходимо задать название для бота. Назовем его Server_alerts_bot:

4) Далее необходимо придумать юзернейм для бота, который должен заканчиваться на _bot, например: vm_alert_bot:

Сохраняем API-токен, он нам понадобится для дальнейшей настройки.
Создание канала в Telegram
Далее создадим канал, в который будут отправляться сообщения с алертами.
1) Чтобы создать новый канал в Telegram, нажимаем на кнопку «New Channel»:

2) Придумаем название, например, Alerts_From_VM:

3) Далее выбираем тип канала — приватный (Private Channel):

4) После того как канал был создан, переходим в его настройки и нажимаем на кнопку с администраторами канала:

5) Нам нужно добавить нашего бота с правами администратора. Для этого нажимаем на кнопку «Add Administrator»:

6) При помощи поиска находим нашего бота:

7) Для добавления бота необходимо сначала нажать на кнопку «OK»:

Далее нажимаем на кнопку «Save»:

Мы успешно создали бота и канал. Далее мы произведем настройку компонентов Prometheus и Alertmanager, а также подключим наш Telegram-канал.
Установка Node Exporter
Node Exporter — это легкий демон, который собирает данные о загрузке процессора, оперативной памяти, дисков, сетевых интерфейсов и других параметрах системы и отдает их по HTTP (по умолчанию порт 9100).
Подключаемся к серверу с которого будем собирать метрики. Все команды, перечисленные ниже, необходимо выполнять от имени пользователя root или от имени обычного пользователя с правами sudo.
1) Скачиваем нужную версию программы (на момент написания актуальна 1.10.2):
2) Распаковываем полученный архив:
3) Заходим в появившуюся папку и копируем бинарный файл в общесистемную директорию:
4) Создаем отдельного системного пользователя, от имени которого будет работать экспортер:
5) Назначаем правильные права на исполняемый файл:
6) Создаем systemd-юнит. Открываем файл:
Вставляем следующее содержимое:
7) Применяем изменения и запускаем службу:
8) Проверяем статус (должен быть active (running)):
Node Exporter успешно установлен и работает.
Настройка и запуск Prometheus и Alertmanager
Подключаемся к серверу, на котором мы будем запускать Prometheus и Alertmanager.
1) Создаем новую директорию для проекта, где будут храниться файлы Prometheus и Alertmanager, и переходим в нее:
2) Создаем конфигурацию для Alertmanager:
Пример рабочей конфигурации с отправкой уведомлений в Telegram:
В параметрах bot_token и chat_id необходимо указать свои значения:
- bot_token — API-токен бота, который можно получить в настройках бота.
- chat_id — уникальный идентификатор канала (ID). Получить ID можно, переслав сообщение из канала сторонним ботам, например, LeadСonverter, FIND_MY_ID_BOT и т.д. Также ID можно получить из web-версии Telegram. Для этого необходимо открыть канал и в строке поиска скопировать значение:

Обратите внимание, что ID канала содержит знак минус, который должен обязательно присутствовать в параметре chat_id.
3) Конфигурация Prometheus:
Используем следующее содержимое:
Вместо 103.88.242.50 необходимо указать IP-адрес сервера, на который мы ранее установили Node Exporter. Вместо second-server можно указать любое другое значение, которое будет обозначать ваш сервер.
4) Далее создадим правило для оповещений с именем vm-availability, которое будет проверять, доступна ли виртуальная машина или она выключена. Если ответ не будет получен, то придет алерт о недоступности:
5) Следующим шагом создадим шаблон для сообщений, которые мы будем получать в Telegram-канале. Создаем новую директорию templates и переходим в нее:
6) Создаем файл шаблона:
Со следующим содержимым:
В шаблоне будет имя события, которое возникло, а также, описание, статус и время возникновения проблемы.
7) Docker Compose файл для запуска:
8) Запускаем контейнеры:
9) Проверим статус алерта и второго сервера. Открываем веб-интерфейс Prometheus, используя внешний IP-адрес сервера и порт 9090. Перейдем в раздел Alerts. Как можно увидеть на скриншоте ниже, ранее созданный алерт отображается в системе и на данный момент он не активен, так как условие его срабатывания еще не наступило:

Проверка работоспособности Alertmanager
1) Сымитируем ситуацию:
Спустя 10 секунд будет отправлено уведомление в Telegram-канал:

Если проблема не будет решена, то повторное напоминание будет приходить раз в час.
2) «Устраняем» проблему. Для этого запускаем Node Exporter:
Спустя 20 секунд будет получено уведомление о решении проблемы:

Заключение
Мы прошли полный путь от создания Telegram-бота и канала до запуска полноценной системы алертинга на базе Prometheus и Alertmanager с оперативной отправкой уведомлений прямо в Telegram.
Мы получили надежную, полностью открытую и бесплатную систему мониторинга (за исключением стоимости инфраструктуры), которая обладает рядом важных преимуществ:
-
Мгновенное оповещение — уведомления попадают прямо в мессенджер, которым вы и ваша команда пользуетесь каждый день. Никаких пропущенных писем и проверок дашбордов.
-
Гибкая настройка — включая уровни критичности и описание возникших проблем.
-
Масштабируемость — для добавления новых серверов или сервисов требуется лишь добавить их в конфигурационный файл и, при необходимости, создать новые правила.
-
Доступность — не требует дополнительных затрат, не считая затрат на свою инфраструктуру.
Теперь ваша система не просто собирает метрики, а активно помогает поддерживать стабильность сервисов, своевременно информируя вас о возникающих проблемах.
