Runbook: Watchdog — automatický monitoring
Přehled
- Script:
/root/projects/sentinel/scripts/watchdog.sh
- Cron:
*/5 * * * * /root/projects/sentinel/scripts/watchdog.sh all >> /var/log/watchdog.log 2>&1
- Log:
/var/log/watchdog.log
- Cooldown:
/tmp/watchdog-cooldown/ (1 soubor per služba)
Co dělá
- Pro každé prostředí (hub, prod) otestuje SSH konektivitu
- Pro každou službu zkontroluje:
- Existenci kontejneru (
docker inspect)
- HTTP health endpoint (
curl http://127.0.0.1:<port><path>)
- Pokud health check selže:
- Zkontroluje cooldown (max 1 restart/hodinu per služba)
- Provede
docker compose up -d v compose dir
- Počká 30s a znovu zkontroluje health
- Pokud restart nepomohl → Telegram alert + Relay API URGENT
Monitorované služby
| Služba |
Kontejner |
Port |
Health path |
Compose dir |
| Auth backend |
s60-auth-backend |
3002 |
/api/health |
/opt/auth |
| Auth frontend |
s60-auth-frontend |
3003 |
/ |
/opt/auth |
| Pulse |
s60-pulse |
3100 |
/health |
/opt/pulse |
| BillIt API |
billit-api |
3200 |
/health |
/opt/billit |
| BillIt Web |
billit-web |
3201 |
/ |
/opt/billit |
| Mail |
s60-mail |
3010 |
/health |
/opt/s60-mail |
| BadWolf |
s60-badwolf |
3000 |
/health |
/opt/bw/badwolf |
Bezpečnostní pravidla
- POUZE
docker compose up -d — žádný rebuild, rsync, delete
- Max 1 restart per služba per hodinu (cooldown)
- Pokud restart nepomůže → alert, STOP (žádné další pokusy)
- Žádné destruktivní operace
- Vše logováno
Ruční spuštění
# Všechna prostředí
/root/projects/sentinel/scripts/watchdog.sh all
# Jen hub
/root/projects/sentinel/scripts/watchdog.sh hub
# Jen prod
/root/projects/sentinel/scripts/watchdog.sh prod
Diagnostika
# Poslední běh
tail -50 /var/log/watchdog.log
# Aktivní cooldowny
ls -la /tmp/watchdog-cooldown/
# Reset cooldownu pro konkrétní službu
rm /tmp/watchdog-cooldown/<env>_<container>
# Test cron
crontab -l | grep watchdog
Alerting
- Telegram: BOT_TOKEN + CHAT_ID z
/root/secrets/telegram/.env
- Relay API: URGENT zpráva přes
fess frontu → Libor
- Alert se posílá POUZE když restart nepomohl nebo selhal
Známé gotchas
- Health checky musí jít přes SSH (
ssh root@IP "curl http://127.0.0.1:PORT/path") — porty bindované na localhost
- Pulse health endpoint:
/health (NE /api/methodologies — ten vrací 401)
- Kontejnery, které na daném serveru neexistují, se automaticky přeskakují