5.6 KiB
AlertBot
Русский · English
Telegram-бот для мониторинга парка серверов поверх Prometheus и Alertmanager: присылает алерты «проблема / в норме» и по команде показывает состояние серверов, сервисов и TLS-сертификатов.
Статус: личный проект, работает · следит за пятью серверами автора
Серверы
SPB
CPU 7% · RAM 41% · диск 38% · swap 0%
load 0.21 · аптайм 12д 4ч
DORM · ⚠ диск
CPU 18% · RAM 63% · диск 87% · swap 2% · temp 52°C
load 1.40 · аптайм 3д 9ч
Пример ответа на /servers (значения условные).
Стек: Python 3.10+ · aiogram 3 · aiohttp · SQLite · Prometheus HTTP API · Alertmanager API v2 · Docker
Возможности
- Алерты: раз в N секунд опрашивает Alertmanager, дедуплицирует по fingerprint и сразу пишет «Проблема · …» и «В норме · …» подписчикам. Своих правил нет — всё, что настроено в Alertmanager
- Сторож: если сам Alertmanager перестал отвечать, бот один раз сообщает об этом и ещё раз — когда мониторинг вернулся
/servers— CPU, RAM, диск, swap, load, аптайм и температура по узлам, ⚠ при превышении порогов/services— какие цели Prometheus не отвечают/certs— дни до истечения TLS-сертификатов, предупреждение меньше чем за 14 дней/alerts— активные алерты;/alerts on|off— подписка- Доступ — только для Telegram ID из списка, остальные молча игнорируются
Быстрый старт
git clone https://github.com/EDeev/alertbot.git && cd alertbot
cp .env.example .env # токен бота, ID, адреса и токены Prometheus/Alertmanager
docker compose up -d
Готовый образ: docker pull ghcr.io/edeev/alertbot или docker pull git.deev.su/edeev/alertbot.
Установка без Docker
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
python bot.py
Конфигурация
| Переменная | Назначение |
|---|---|
BOT_TOKEN |
токен бота от @BotFather |
ALLOWED_IDS |
Telegram ID через запятую, кому можно пользоваться ботом |
AM_ALERTS_URL, PROM_QUERY_URL |
Alertmanager /api/v2/alerts и Prometheus /api/v1/query |
AM_TOKEN, PROM_TOKEN |
токены, бот передаёт их в заголовке Authorization: Bearer |
SERVERS_ORDER |
имена узлов через запятую, как в лейбле server метрик |
ALERT_POLL_SECONDS, ALERT_HTTP_TIMEOUT |
период опроса и таймаут запросов |
ALERT_WATCHDOG_FAILURES |
после скольких неудачных опросов подряд сообщать о недоступности (по умолчанию 4) |
ALERTBOT_DB, ALERTBOT_LOG_FILE |
файл SQLite и файл лога (пусто — только stdout) |
Important
Не открывайте Prometheus и Alertmanager в интернет без авторизации. Бот рассчитан на обратный прокси, который проверяет токен из заголовка
Authorization: Bearer …, — пример для nginx в docs/deploy.md.
Развёртывание
Бот работает на отдельном VPS как systemd-юнит. Prometheus и Alertmanager стоят на другом сервере
за nginx, который пускает бота только с токеном. Docker-образ собирает GitHub Actions на каждый тег
v* и публикует в GitHub Packages и в реестр git.deev.su.
Разработка
pip install -r requirements-dev.txt
ruff check . && pytest
Тесты работают без сети: Telegram и Prometheus подменяются. Проверяются дедупликация алертов, сообщения о возврате в норму, сторож и тексты сводок.
Лицензия
MIT — см. LICENSE.
Автор
Деев Егор Викторович — GitHub · Telegram · egor@deev.space
Сделано с ❤️ — deev.space