Files
nas-runbooks/common/watchdog-tailscale-bridge-faux-timeout-restart-20260916.md
T

25 lines
3.0 KiB
Markdown

# Watchdog tailscale-nyora-bridge : fausse alerte "echec apres redemarrage" (16/09/2026)
## Contexte
tailscale-bridge-watchdog (cree le 05/09/2026, ticket infra-2026-09-019, jamais documente ni versionne depuis) surveille en continu SOCKS5/HTTP/SSH du pont tailscale-nyora-bridge. Sur 3 echecs consecutifs, il declenche une remediation automatique (docker restart bridge + stub bifrost), puis alerte Telegram si la remediation echoue.
## Incident
Nuit du 15 au 16/09/2026 : SSH_RELAY timeouts intermittents (01h06, puis 01h16-01h18) -> seuil critique atteint -> 1er `docker restart tailscale-nyora-bridge` execute, mais NAS sous forte charge (load average ~8, swap 5.0Gi/13Gi utilise) -> le restart a depasse le timeout de 20s code en dur dans le script, tue avant confirmation -> health-check suivant echoue avec `SOCKS5: [Errno -2] Name does not resolve` (DNS Docker indisponible pendant la fenetre de redemarrage) -> alerte Telegram envoyee ("Echec apres redemarrage automatique"). Un 2e cycle de remediation automatique, 2 minutes plus tard, a reussi (restart en 13s cette fois) et le pont est reste sain en continu depuis. Aucune intervention manuelle n'etait donc necessaire sur le fond -- seulement une fausse alerte.
## Cause racine
Le timeout de la commande `docker restart tailscale-nyora-bridge` dans bridge_watchdog.py (fonction `sh()`, defaut 20s) est trop serre pour ce conteneur (tailscaled + socat co-processes) des que le NAS est sous pression memoire/IO -- deja signale le 30/08 (swap 4.1Gi/13Gi), en aggravation le 16/09 (5.0Gi/13Gi, load 8.08).
## Fix applique
- `watchdog/bridge_watchdog.py` : `sh("docker restart tailscale-nyora-bridge")` -> `timeout=45` explicite (au lieu du defaut 20s)
- Attente post-remediation avant re-test : `time.sleep(15)` -> `time.sleep(20)`
- Image rebuild + redeploiement, verifie healthy immediatement apres (check #1 OK)
## Piege operationnel decouvert pendant le fix
`docker compose up -d tailscale-bridge-watchdog` (cible un seul service du compose) a recree tailscale-nyora-bridge (dependance depends_on) SANS le redemarrer, le laissant en etat `Created` (donc hors service, pont NAS<->VPS coupe brievement) pendant que le watchdog echouait a demarrer (conflit de nom sur l'ancien conteneur). Correction : `docker start` explicite du bridge, `docker rm -f` de l'ancien watchdog, puis `docker compose up -d` SANS filtre de service pour recreer proprement les deux dans l'ordre. A eviter a l'avenir : toujours faire un `up -d` complet du compose (pas cible sur un service ayant des dependances) quand un depends_on est en jeu.
## A signaler
Le TS_AUTHKEY est en clair dans docker-compose.yml, desormais commite dans bolbol/tailscale-nyora-bridge (repo prive, pas de rotation faite -- a evaluer si ca merite un passage en .env/.secrets-staging comme les autres credentials).
## Non traite (hors perimetre de ce fix)
Pression memoire/swap du NAS en aggravation (5.0Gi/13Gi de swap, load average 8.08 au moment de l'incident) -- cause racine plus large deja notee le 30/08/2026, necessite un audit dedie des conteneurs consommateurs.