healthbot
Телеграм-бот, который следит за твоими сервисами и пишет в личку, когда что-то легло. Опционально умеет управлять флотом Komodo и принимать его алерты.
Что умеет
Следит. Присылаешь ссылку — бот запрашивает её и предлагает выбрать, за чем следить: HTTP-статус, тело целиком или конкретное поле JSON (по дереву ответа кликаешь мышкой, путь соберётся сам).
Объясняет. Когда правило нарушено, в сообщении видно не только «json изменился», но и что ожидали, что пришло сейчас и сам ответ. Для режима «тело целиком» показывается diff — только изменившиеся строки, а не простыня на сотню.
Не будит зря. Падение объявляется после MONITOR__FAILURE_THRESHOLD
неудач подряд (по умолчанию 2). Одиночный провал — это почти всегда
моргнувшая сеть, а не упавший сервис.
Считает аптайм, инциденты, суммарный даунтайм и время отклика.
Кнопки в карточке: проверить сейчас (покажет текущий ответ), поставить на паузу на время работ, переименовать, принять текущий ответ за новый эталон — если сервис изменился намеренно, не надо пересоздавать его и терять статистику.
Админов может быть несколько: ADMIN_IDS=[111,222].
Komodo
Обе интеграции необязательные: без них бот работает как обычная звонилка.
Управление флотом
KOMODO__URL=https://komodo.example.com
KOMODO__KEY=...
KOMODO__SECRET=...
Появляется /fleet: сервера с числом живых стеков, список стеков,
карточка стека с кнопками Deploy / Restart / Stop и хвостом логов.
Каждое действие спрашивает подтверждение — деплой прода с телефона
слишком легко нажать случайно.
Ключ создаётся в Komodo: Settings → API Keys. Права наследуются от пользователя, которым ключ создан, поэтому под бота стоит завести отдельного пользователя и выдать ему ровно то, чем он должен управлять.
Приём алертов
WEB__ENABLED=true
WEB__PORT=8080
WEB__TOKEN=<любая длинная строка>
Бот поднимает HTTP-приёмник. В Komodo заводится Alerter с endpoint type Custom и URL:
http://healthbot:8080/komodo/alert?token=<WEB__TOKEN>
Токен принимается и заголовком X-Alert-Token, и query-параметром —
второе потому, что Komodo произвольные заголовки к вебхуку не добавляет.
Порт лучше не публиковать. Если Komodo и бот стоят в одной docker-сети,
адрес выше резолвится внутри неё и наружу не выходит совсем. Для этого в
docker-compose.override.yml пропиши сеть и алиас — пример лежит в
docker-compose.override.yml.example.
Алерты форматируются по-человечески: недоступный сервер, CPU/память/диск, смена состояния стека, расхождение git и Komodo, упавшие процедуры и сборки. Незнакомый тип не проглатывается, а показывается как есть.
Запуск
cp .env.example .env # заполнить ADMIN_ID и BOT__TOKEN
make up
make logs
make rebuild — пересобрать образ, make down — остановить.