Aller au contenu

Health Check Global

Le workflow Health Check Global surveille la santé des conteneurs Docker toutes les 5 minutes. Il détecte les conteneurs en état unhealthy ou arrêtés inopinément et notifie les admins via Telegram.

MéthodeOutilStatus
Docker ps filtréSSH + CLIActuel (production)
Prometheus cAdvisorcontainer_health_statusNon fonctionnel (Docker 29+)
HTTP endpointsCurl vers /healthzSpécifié, non implémenté
ServiceStackCritical
CaddysecurityOui
CrowdSecsecurityOui
N8Nn8nOui
N8N-Postgresn8nOui
Redisn8nOui
N8N Workersn8nNon
OdooodooOui
Odoo-PostgresodooOui
QdrantaiNon
Claude-OllamaaiNon
PrometheusmonitoringNon
GrafanamonitoringNon

ProblèmeSans health checkAvec health check
Container crashDécouvert par un utilisateurAlerte en 5 minutes
Service unhealthyPas de visibilitéDétection automatique
Downtime prolongéPas de notificationIntervention rapide
MéthodeAvantageInconvénient
SSH + docker psFonctionne toujoursPas d’historique Prometheus
cAdvisor metricsHistorique, graphesBug Docker 29+

Schedule (5min)
SSH Docker Health
(docker ps --filter)
Parse Results
IF: count > 0
┌────┴────┐
│ yes │ no
▼ ▼
Prepare Skip
Notification
Notification Hub → Telegram
Fenêtre de terminal
docker ps -a \
--filter "health=unhealthy" \
--filter "status=exited" \
--format json

Cette commande retourne :

  • Les conteneurs avec healthcheck échoué (health=unhealthy)
  • Les conteneurs arrêtés inopinément (status=exited)

Node SSH Docker Health :

Type: SSH
Host: localhost
Command: docker ps -a --filter "health=unhealthy" --filter "status=exited" --format json

Parse Results (Code) :

const output = $json.stdout;
if (!output || output.trim() === '') {
return [{ json: { count: 0, containers: [] } }];
}
const containers = output.trim().split('\n')
.filter(line => line)
.map(line => JSON.parse(line))
.map(c => ({
name: c.Names,
status: c.State,
health: c.Status
}));
return [{
json: {
count: containers.length,
containers: containers
}
}];
{
"source": "health_check",
"type": "health_issue",
"severity": "critical",
"title": "2 container(s) en problème",
"message": "Containers détectés:\n- n8n-worker-1 (unhealthy)\n- redis (exited)",
"container": "n8n-worker-1",
"containers": ["n8n-worker-1", "redis"],
"timestamp": "2026-01-20T10:00:00.000Z"
}
🚨 HEALTH CHECK ALERT
2 container(s) en problème
Containers détectés:
❌ n8n-worker-1 (unhealthy)
❌ redis (exited)
Stack affecté: n8n-stack
[🔄 Restart] [📋 Logs] [🔇 Mute 1h]
Fenêtre de terminal
# Voir les conteneurs unhealthy
docker ps -a --filter "health=unhealthy"
# Voir les conteneurs arrêtés
docker ps -a --filter "status=exited"
# Health d'un conteneur spécifique
docker inspect --format='{{.State.Health.Status}}' n8n
# Logs des health checks Docker
docker inspect --format='{{range .State.Health.Log}}{{.Output}}{{end}}' n8n

HTTP Checks :

{
"checks": [
{
"name": "Caddy",
"type": "http",
"url": "https://guigpap.com",
"expected_status": 200,
"timeout_ms": 10000
},
{
"name": "N8N",
"type": "http",
"url": "https://n8n.guigpap.com/healthz"
}
]
}

Rapport quotidien :

📊 HEALTH REPORT - 20 Janvier 2026
════════════════════════
UPTIME 24H
════════════════════════
🟢 Caddy 100.0%
🟢 N8N 99.9% (1 incident)
🟢 Odoo 100.0%
🟡 CrowdSec 98.5% (2 incidents)
════════════════════════
HEALTH SCORE: 97/100
════════════════════════

Escalade :

Durée downAction
> 5 minPremière alerte
> 15 minRappel
> 30 minEscalade critique
Multiple servicesAlerte immédiate
LimiteImpactMitigation
Pas d’HTTP checksDétecte état Docker, pas applicatifPrévu en évolution
Pas de rapport quotidienPas de vue historiqueDashboard Grafana
5min intervalleLatence détection max 5minAcceptable pour usage perso

Si besoin de HTTP checks :

  • Ajouter des checks curl vers /healthz de chaque service
  • Différencier Docker healthy vs HTTP répondant
  • Alertes plus précises

Si besoin de rapport quotidien :

  • Agréger les incidents sur 24h
  • Calculer uptime par service
  • Envoyer digest à 8h

Si cAdvisor redevient fonctionnel :

  • Migrer vers métriques Prometheus
  • Supprimer le check SSH
  • Historique et graphes natifs
ProblèmeVérification
Faux positifsConteneurs sans healthcheck retournent “none”
SSH timeoutCredential SSH valide ? Port 22 accessible ?
Pas de notificationWorkflow actif ? Notification Hub ok ?
Trop d’alertesAjuster les filtres dans docker ps