3.0 KiB
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=45explicite (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.