Self-Healing System en Go
Système qui redémarre automatiquement les conteneurs en cas d'erreur 500
Go
Docker
Prometheus
Voir sur GitHubProblème
En production, certains conteneurs tombent silencieusement - ils répondent encore sur le port mais retournent des erreurs 500. Les healthchecks Docker classiques ne détectent pas ce type de dégradation.
Solution
Un daemon Go léger qui :
- Interroge Prometheus pour détecter les pics d’erreurs 500
- Corrèle avec les métriques de ressources (CPU, mémoire)
- Décide s’il faut redémarrer le conteneur ou alerter l’équipe
- Agit en redémarrant le conteneur via l’API Docker
func (h *Healer) Check(ctx context.Context, target string) Action {
errorRate := h.prometheus.QueryErrorRate(ctx, target)
if errorRate > h.threshold {
if h.canRestart(target) {
return ActionRestart
}
return ActionAlert
}
return ActionNone
}
Architecture
- Prometheus : source de métriques
- Docker API : contrôle des conteneurs
- Webhook : notifications Slack/Discord
- Rate limiter : éviter les restart loops
Résultats
- Réduction de 80% du MTTR (Mean Time To Recovery)
- Zéro intervention manuelle pour les incidents mineurs
- Faux positifs < 2%