Как настроить алерты в Alertmanager с доставкой в Telegram

    Команда Simple-Server
    03.06.2026
    10 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Предварительные требования

    Для работы нам понадобятся:

    • Два облачных сервера с дистрибутивом Linux Ubuntu 24.04.

    • Установленные Docker и Docker Compose на одном из серверов.

    • Telegram-бот и канал — ниже расскажем, как их создать.

    Два облачных сервера с дистрибутивом Linux Ubuntu 24.04.

    Установленные Docker и Docker Compose на одном из серверов.

    Telegram-бот и канал — ниже расскажем, как их создать.

    Для серверов выберите конфигурацию с одноядерным процессором, 1 ГБ оперативной памяти, 15 ГБ места на NVMe-диске и публичным IPv4-адресом, который можно заказать при создании сервера или в разделе «Сеть».

    Серверы будет установлены в течение пары минут. IPv4-адрес, логин и пароль для подключения по протоколу SSH будут доступны в разделе «Дашборд» для каждого из серверов.

    Alertmanager — это компонент с открытым исходным кодом, который работает с уведомлениями, созданными клиентами, например, Prometheus. Его основная цель — принимать, обрабатывать и отправлять уведомления об алертах (оповещениях) конечным получателям.

    По умолчанию Alertmanager умеет отправлять уведомления на адрес электронной почты, а также в Slack, PagerDuty, OpsGenie и множество других систем. Однако один из самых популярных и удобных методов для получения уведомлений — это Telegram. Получать уведомления можно прямо в чат или группу; дополнительно поддерживаются языки разметки Markdown и HTML.

    Прежде чем приступать к настройке 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 — это легкий демон, который собирает данные о загрузке процессора, оперативной памяти, дисков, сетевых интерфейсов и других параметрах системы и отдает их по HTTP (по умолчанию порт 9100).

    Подключаемся к серверу с которого будем собирать метрики. Все команды, перечисленные ниже, необходимо выполнять от имени пользователя root или от имени обычного пользователя с правами sudo.

    1. Скачиваем нужную версию программы (на момент написания актуальна 1.10.2):
    wget https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz
    1. Распаковываем полученный архив:
    tar -xvf node_exporter-1.10.2.linux-amd64.tar.gz
    1. Заходим в появившуюся папку и копируем бинарный файл в общесистемную директорию:
    cd node_exporter-1.10.2.linux-amd64/ && mv node_exporter /usr/local/bin/
    1. Создаем отдельного системного пользователя, от имени которого будет работать экспортер:
    useradd --no-create-home --shell /sbin/nologin node_exporter
    1. Назначаем правильные права на исполняемый файл:
    chown root:root /usr/local/bin/node_exporter
    1. Создаем systemd-юнит. Открываем файл:
    nano /etc/systemd/system/node_exporter.service

    Вставляем следующее содержимое:

    [Unit] Description=Node Exporter After=network.target [Service] User=node_exporter Group=node_exporter Type=simple ExecStart=/usr/local/bin/node_exporter
    1. Применяем изменения и запускаем службу:
    systemctl daemon-reload && systemctl start node_exporter
    1. Проверяем статус (должен быть active (running)):
    systemctl status node_exporter

    Node Exporter успешно установлен и работает.

    Настройка и запуск Prometheus и Alertmanager

    Подключаемся к серверу, на котором мы будем запускать Prometheus и Alertmanager.

    1. Создаем новую директорию для проекта, где будут храниться файлы Prometheus и Alertmanager, и переходим в нее:
    mkdir monitoring && cd monitoring
    1. Создаем конфигурацию для Alertmanager:

    Пример рабочей конфигурации с отправкой уведомлений в Telegram:

    global: resolve_timeout: 20s templates: - '/etc/alertmanager/templates/*.tmpl' route: receiver: telegram group_by: ['alertname'] group_wait: 10s receivers: - name: telegram telegram_configs: - api_url: 'https://api.telegram.org' bot_token: <API_ТОКЕН_БОТА> chat_id: <ID_КАНАЛА> message: '{{ template "telegram.message" . }}'

    В параметрах bot_token и chat_id необходимо указать свои значения:

    • bot_token — API-токен бота, который можно получить в настройках бота.
    • chat_id — уникальный идентификатор канала (ID). Получить ID можно, переслав сообщение из канала сторонним ботам, например, LeadСonverter, FIND_MY_ID_BOT и т.д. Также ID можно получить из web-версии Telegram. Для этого необходимо открыть канал и в строке поиска скопировать значение:

    Обратите внимание, что ID канала содержит знак минус, который должен обязательно присутствовать в параметре chat_id.

    1. Конфигурация Prometheus:

    Используем следующее содержимое:

    global: scrape_interval: 5s evaluation_interval: 5s rule_files: - '/etc/prometheus/alerts.yml' scrape_configs: - job_name: 'node-exporter' static_configs: - targets: ['103.88.242.50:9100'] labels: instance_name: 'second-server' alerting: alertmanagers: - static_configs: - targets: ['alertmanager:9093']

    Вместо 103.88.242.50 необходимо указать IP-адрес сервера, на который мы ранее установили Node Exporter. Вместо second-server можно указать любое другое значение, которое будет обозначать ваш сервер.

    1. Далее создадим правило для оповещений с именем vm-availability, которое будет проверять, доступна ли виртуальная машина или она выключена. Если ответ не будет получен, то придет алерт о недоступности:
    groups: - name: vm-availability rules: - alert: VMDown expr: up{job="node-exporter"} == 0 for: 0s labels: severity: 'critical' annotations: summary: "Виртуальная машина {{ $labels.hostname }} ({{ $labels.instаncе }}) недоступна!" description: "Виртуальная машина {{ $labels.hostname }} недоступна или выключена!" value: "{{ $value }}"
    1. Следующим шагом создадим шаблон для сообщений, которые мы будем получать в Telegram-канале. Создаем новую директорию templates и переходим в нее:
    mkdir templates && cd templates {{ define "telegram.message" }} <b>{{ if eq .Status "firing" }}⚠️ Возникла проблема⚠️{{ else }}✅ Проблема решена ✅{{ end }}</b> <b>Событие:</b> {{ .CommonLabels.alertname }} <b>Описание:</b> {{ (index .Alerts 0).Annotations.description }} <b>Статус:</b> {{ .Status }} <b>Критичность:</b> {{ .CommonLabels.severity }} <b>Виртуальная машина:</b> {{ .CommonLabels.instance_name }} <b>Время начала:</b> {{ (index .Alerts 0).StartsAt.Local.Format "02-01-2006 15:04:05 MST" }} {{ end }}

    В шаблоне будет имя события, которое возникло, а также, описание, статус и время возникновения проблемы.

    1. Docker Compose файл для запуска:
    cd /root/monitoring && nano docker-compose.yml services: prometheus: image: prom/prometheus:v3.7.3 container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus - ./alerts.yml:/etc/prometheus/alerts.yml command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' - '--web.enable-lifecycle' ports: - "9090:9090" networks: - monitoring alertmanager: image: prom/alertmanager:v0.29.0 container_name: alertmanager restart: unless-stopped volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml - ./templates/:/etc/alertmanager/templates ports: - "9093:9093" command: - '--config.file=/etc/alertmanager/alertmanager.yml' networks: - monitoring networks: monitoring: driver: bridge
    1. Проверим статус алерта и второго сервера. Открываем веб-интерфейс Prometheus, используя внешний IP-адрес сервера и порт 9090. Перейдем в раздел Alerts. Как можно увидеть на скриншоте ниже, ранее созданный алерт отображается в системе и на данный момент он не активен, так как условие его срабатывания еще не наступило:

    Проверка работоспособности Alertmanager

    systemctl stop node_exporter.service

    Спустя 10 секунд будет отправлено уведомление в Telegram-канал:

    Если проблема не будет решена, то повторное напоминание будет приходить раз в час.

    1. «Устраняем» проблему. Для этого запускаем Node Exporter:
    systemctl start node_exporter.service

    Спустя 20 секунд будет получено уведомление о решении проблемы:

    Мы прошли полный путь от создания Telegram-бота и канала до запуска полноценной системы алертинга на базе Prometheus и Alertmanager с оперативной отправкой уведомлений прямо в Telegram.

    Мы получили надежную, полностью открытую и бесплатную систему мониторинга (за исключением стоимости инфраструктуры), которая обладает рядом важных преимуществ:

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

    • Гибкая настройка — включая уровни критичности и описание возникших проблем.

    • Масштабируемость — для добавления новых серверов или сервисов требуется лишь добавить их в конфигурационный файл и, при необходимости, создать новые правила.

    • Доступность — не требует дополнительных затрат, не считая затрат на свою инфраструктуру.

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

    Гибкая настройка — включая уровни критичности и описание возникших проблем.

    Масштабируемость — для добавления новых серверов или сервисов требуется лишь добавить их в конфигурационный файл и, при необходимости, создать новые правила.

    Доступность — не требует дополнительных затрат, не считая затрат на свою инфраструктуру.

    Теперь ваша система не просто собирает метрики, а активно помогает поддерживать стабильность сервисов, своевременно информируя вас о возникающих проблемах.**
    **


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны