mirror of
https://github.com/EDeev/alertbot.git
synced 2026-10-07 20:49:56 +03:00
Telegram-бот мониторинга парка серверов: алерты Alertmanager и сводки Prometheus по запросу. aiogram 3
| .github/workflows | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| bot.py | ||
| compose.yaml | ||
| Dockerfile | ||
| handlers.py | ||
| init.py | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
| requirements-dev.txt | ||
| requirements.txt | ||
| sql.py | ||
AlertBot
Telegram-бот для мониторинга парка серверов поверх Prometheus + Alertmanager. Работает как
push-уведомитель («что-то сломалось / починилось») и как справочная панель по команде
(/servers, /services, /certs).
Возможности
- Алерты в реальном времени — фоновая задача раз в N секунд опрашивает Alertmanager, дедуплицирует по fingerprint и сразу шлёт «Проблема · …» / «В норме · …» подписанным пользователям. Никаких собственных правил — подхватывает всё, что уже настроено в Alertmanager, по лейблам, а не по именам целей.
/servers— CPU, RAM, диск, swap, load, аптайм и (если есть hwmon-датчики) температура по каждому узлу, с ⚠ при превышении порогов./services— какие цели Prometheus сейчасup, какие нет./certs— сколько дней осталось у каждого TLS-сертификата, с предупреждением при <14 дней./alerts— список активных алертов сейчас;/alerts on|off— подписка/отписка.- Доступ — по вайтлисту Telegram user id, все остальные тихо игнорируются.
Требования
- Python 3.10+
- Свой Prometheus + Alertmanager с уже настроенными правилами алертов.
- Alertmanager и Prometheus должны быть доступны боту по HTTP — либо напрямую (если бот
крутится на той же машине), либо через reverse-proxy с токен-параметром в URL (так это
сделано в этом проекте — см.
AM_ALERTS_URL/PROM_QUERY_URL/AM_TOKEN/PROM_TOKENв.env.example), чтобы не открывать сами Prometheus/Alertmanager в интернет без авторизации.
Установка
pip install -r requirements.txt
cp .env.example .env
# заполнить .env своими значениями
python bot.py
Переменные окружения
Все — в .env.example:
BOT_TOKEN— токен бота от @BotFather.ALLOWED_IDS— Telegram user id через запятую, кому разрешено пользоваться ботом.AM_ALERTS_URL/PROM_QUERY_URL/AM_TOKEN/PROM_TOKEN— адреса и токены до Alertmanager API (/api/v2/alerts) и Prometheus API (/api/v1/query).SERVERS_ORDER— имена узлов через запятую, ровно как они указаны в лейблеserverу твоих метрик (node_exporterи т.п.) — определяет порядок и состав вывода/servers.ALERT_POLL_SECONDS/ALERT_HTTP_TIMEOUT— период опроса и таймаут запросов.
Структура
init.py # конфиг из переменных окружения, инициализация Bot/Dispatcher
sql.py # SQLite: подписчики на алерты, дедуп по fingerprint
handlers.py # команды бота + фоновый опрос Alertmanager
bot.py # точка входа
Хранилище — один файл SQLite (notifications.db, путь по умолчанию задаётся при
инициализации DatabaseManager), без внешних зависимостей вроде Redis/Postgres.
Продакшен
Юнит systemd — самый простой способ держать бота в фоне постоянно:
[Unit]
Description=AlertBot
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/alertbot
ExecStart=/opt/alertbot/venv/bin/python3 bot.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Лицензия
MIT