Skip to content

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á

  1. Pro každé prostředí (hub, prod) otestuje SSH konektivitu
  2. Pro každou službu zkontroluje:
  3. Existenci kontejneru (docker inspect)
  4. HTTP health endpoint (curl http://127.0.0.1:<port><path>)
  5. Pokud health check selže:
  6. Zkontroluje cooldown (max 1 restart/hodinu per služba)
  7. Provede docker compose up -d v compose dir
  8. Počká 30s a znovu zkontroluje health
  9. 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í