Files
healthbot/README.md
T

90 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# healthbot
[![AI Slop Inside](https://sladge.net/badge.svg)](https://sladge.net)
Телеграм-бот, который следит за твоими сервисами и пишет в личку, когда
что-то легло. Опционально умеет управлять флотом [Komodo](https://komo.do)
и принимать его алерты.
## Что умеет
**Следит.** Присылаешь ссылку — бот запрашивает её и предлагает выбрать, за
чем следить: HTTP-статус, тело целиком или конкретное поле JSON (по дереву
ответа кликаешь мышкой, путь соберётся сам).
**Объясняет.** Когда правило нарушено, в сообщении видно не только «json
изменился», но и что ожидали, что пришло сейчас и сам ответ. Для режима
«тело целиком» показывается diff — только изменившиеся строки, а не
простыня на сотню.
**Не будит зря.** Падение объявляется после `MONITOR__FAILURE_THRESHOLD`
неудач подряд (по умолчанию 2). Одиночный провал — это почти всегда
моргнувшая сеть, а не упавший сервис.
**Считает** аптайм, инциденты, суммарный даунтайм и время отклика.
**Кнопки в карточке:** проверить сейчас (покажет текущий ответ), поставить
на паузу на время работ, переименовать, принять текущий ответ за новый
эталон — если сервис изменился намеренно, не надо пересоздавать его и
терять статистику.
Админов может быть несколько: `ADMIN_IDS=[111,222]`.
## Komodo
Обе интеграции необязательные: без них бот работает как обычная звонилка.
### Управление флотом
```env
KOMODO__URL=https://komodo.example.com
KOMODO__KEY=...
KOMODO__SECRET=...
```
Появляется `/fleet`: сервера с числом живых стеков, список стеков,
карточка стека с кнопками **Deploy / Restart / Stop** и хвостом логов.
Каждое действие спрашивает подтверждение — деплой прода с телефона
слишком легко нажать случайно.
Ключ создаётся в Komodo: *Settings → API Keys*. Права наследуются от
пользователя, которым ключ создан, поэтому под бота стоит завести
отдельного пользователя и выдать ему ровно то, чем он должен управлять.
### Приём алертов
```env
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, упавшие процедуры и
сборки. Незнакомый тип не проглатывается, а показывается как есть.
## Запуск
```sh
cp .env.example .env # заполнить ADMIN_ID и BOT__TOKEN
make up
make logs
```
`make rebuild` — пересобрать образ, `make down` — остановить.