5.3 KiB
5.3 KiB
Analyse : Que fait Loki pendant "health: starting" ?
🔍 Situation Observée
État Actuel
- Statut Docker :
Up X seconds (health: starting)
- Endpoint /ready : Retourne HTTP 200 et "ready" ✅
- Logs Loki : Fonctionnement normal ✅
- Healthcheck Docker : Continue d'échouer ❌
Incohérence Détectée
# Test manuel depuis l'extérieur - SUCCÈS
curl -s http://localhost:3100/ready # → "ready"
# Test manuel depuis l'intérieur - SUCCÈS
docker exec loki wget -q -O- http://localhost:3100/ready # → "ready"
# Healthcheck Docker - ÉCHEC
# Retourne : "Loki starting: Log aggregation service not yet ready"
🕐 Ce que Loki Attend Pendant "health: starting"
1. Start Period (120 secondes)
Loki est dans la période de grâce où Docker n'évalue pas encore le healthcheck comme définitif :
- Durée : 120 secondes depuis le démarrage
- Comportement : Docker ignore les échecs de healthcheck
- Statut : "health: starting" → "healthy" ou "unhealthy"
2. Initialisation des Composants Loki
Loki initialise ses composants internes dans cet ordre :
- Configuration : Lecture du fichier de configuration
- Stockage : Initialisation des volumes et index
- Ingester : Composant de réception des logs
- Distributor : Composant de distribution
- Query Frontend : Interface de requête
- Table Manager : Gestion des tables d'index
3. Processus de Démarrage Observé
# Logs typiques pendant le démarrage
level=info msg="starting recalculate owned streams job"
level=info msg="completed recalculate owned streams job"
level=info msg="uploading tables" index-store=tsdb-2020-10-24
level=info msg="flushing stream" component=ingester
4. Délai d'Attente Ingester
Loki a un délai d'attente de l'ingester après être "prêt" :
- Message : "Ingester not ready: waiting for 15s after being ready"
- Durée : 15 secondes supplémentaires
- Raison : Stabilisation des composants internes
🚨 Problème Identifié : Healthcheck Docker Défaillant
Cause Racine
Le healthcheck Docker ne fonctionne pas correctement malgré :
- Loki fonctionnel
- Endpoint /ready accessible
- Configuration healthcheck corrigée
Hypothèses
- Problème de timing : Healthcheck s'exécute à un mauvais moment
- Problème d'environnement : Différence d'environnement d'exécution
- Problème de cache Docker : Cache healthcheck corrompu
- Problème de réseau interne : Connectivité réseau Docker
🔧 Solutions Proposées
Solution 1: Healthcheck Simplifié (RECOMMANDÉE)
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3100/ready"]
interval: 30s
timeout: 15s
retries: 5
start_period: 120s
Solution 2: Healthcheck avec Logging Détaillé
healthcheck:
test: ["CMD", "sh", "-c", "echo 'Testing Loki readiness...' && wget -q --spider http://localhost:3100/ready && echo 'Loki ready' || (echo 'Loki not ready' && exit 1)"]
interval: 30s
timeout: 15s
retries: 5
start_period: 120s
Solution 3: Healthcheck Alternative (Metrics)
healthcheck:
test: ["CMD", "sh", "-c", "wget -q --spider http://localhost:3100/metrics || wget -q --spider http://localhost:3100/ready"]
interval: 30s
timeout: 15s
retries: 5
start_period: 120s
Solution 4: Pas de Healthcheck (Temporaire)
# Commentaire temporaire du healthcheck pour tester
# healthcheck:
# test: ["CMD", "wget", "-q", "--spider", "http://localhost:3100/ready"]
📊 Timeline Typique du Démarrage Loki
0-30 secondes : Initialisation
- Démarrage des processus
- Lecture de la configuration
- Initialisation du stockage
30-60 secondes : Composants
- Démarrage de l'ingester
- Démarrage du distributor
- Initialisation des tables
60-90 secondes : Stabilisation
- Recalcul des streams
- Upload des tables d'index
- Flush des streams
90-120 secondes : Finalisation
- Délai d'attente ingester (15s)
- Stabilisation finale
- Service prêt
🎯 Recommandations
Immédiate
- Simplifier le healthcheck pour éliminer les variables
- Augmenter les timeouts si nécessaire
- Surveiller les logs pendant le démarrage
À Moyen Terme
- Optimiser la configuration Loki pour un démarrage plus rapide
- Ajuster les ressources (mémoire, CPU) si nécessaire
- Documenter les patterns de démarrage observés
Monitoring
- Surveiller la durée de démarrage
- Alerter si le démarrage prend plus de 2 minutes
- Documenter les variations de performance
🔍 Diagnostic Continue
Commandes Utiles
# Vérifier le statut
docker compose --env-file .env.master ps loki
# Vérifier les logs de démarrage
docker logs loki --tail 50
# Tester l'endpoint manuellement
curl -s http://localhost:3100/ready
# Vérifier les healthchecks
docker inspect loki --format='{{range .State.Health.Log}}{{.Start}} - {{.ExitCode}}: {{.Output}}{{end}}' | tail -5
Métriques à Surveiller
- Temps de démarrage : < 2 minutes
- Disponibilité endpoint : /ready retourne "ready"
- Logs d'erreur : Absence d'erreurs critiques
- Ressources : Utilisation CPU/mémoire acceptable
Document créé le 2025-09-21
Version : 1.0
Analyse : Loki Health Starting Process