Articles Projets À propos

Self-Healing System en Go

Système qui redémarre automatiquement les conteneurs en cas d'erreur 500

Go Docker Prometheus
Voir sur GitHub

Problè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 :

  1. Interroge Prometheus pour détecter les pics d’erreurs 500
  2. Corrèle avec les métriques de ressources (CPU, mémoire)
  3. Décide s’il faut redémarrer le conteneur ou alerter l’équipe
  4. 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%