5.8 KiB
5.8 KiB
Diagnostic : Loki Unhealthy - Causes et Solutions
🔍 Analyse du Problème
Symptômes Observés
- Loki démarre et fonctionne (logs normaux)
- Endpoint
/ready
retourne "ready" depuis l'intérieur du conteneur - Healthcheck externe retourne HTTP 503 "Service Unavailable"
- Message d'erreur : "Ingester not ready: waiting for 15s after being ready"
- Healthcheck Docker marque le service comme "unhealthy"
Cause Racine Identifiée
Loki a un délai d'attente de 15 secondes après être "prêt" avant que l'endpoint /ready
retourne un code HTTP 200. Pendant cette période, il retourne HTTP 503.
🚨 Raisons Possibles pour Loki Unhealthy
1. Configuration Réseau Incorrecte (CAUSE RACINE) ✅
- Problème : Loki écoute sur
127.0.0.1
au lieu de0.0.0.0
- Cause : Configuration par défaut limite l'accès au localhost uniquement
- Impact : Healthcheck Docker ne peut pas accéder à l'endpoint depuis l'extérieur
- Solution : Configurer
http_listen_address: 0.0.0.0
etinstance_addr: 0.0.0.0
2. Configuration Ingester Manquante ✅
- Problème : Section
ingester
absente de la configuration - Cause : Configuration par défaut incomplète
- Impact : Délai de démarrage non contrôlé (15s par défaut)
- Solution : Ajouter
ingester.lifecycler.min_ready_duration: 5s
3. Commande Healthcheck Incompatible ✅
- Problème :
curl
non disponible dans le conteneur Loki - Cause : Image Loki ne contient pas curl par défaut
- Solution : Utiliser
wget
(disponible dans l'image)
4. Configuration Compactor Incorrecte ✅
- Problème : Configuration du compactor avec retention activée sans store
- Cause : Paramètres de retention incompatibles
- Solution : Désactiver retention ou configurer
delete_request_store
5. Ressources Système Insuffisantes
- Mémoire insuffisante pour Loki
- CPU surchargé
- Espace disque insuffisant
6. Configuration Healthcheck Inadéquate
- Timeout trop court (10s)
- Intervalle trop fréquent (30s)
- Retries insuffisantes (3)
🔧 Solutions Proposées
Solution 1: Configuration Réseau Correcte (RÉSOLUTION DÉFINITIVE)
loki:
# Configuration réseau OBLIGATOIRE
server:
http_listen_address: 0.0.0.0 # ← CRITIQUE : Écoute sur toutes les interfaces
grpc_listen_address: 0.0.0.0
common:
instance_addr: 0.0.0.0 # ← CRITIQUE : Adresse sur toutes les interfaces
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3100/ready"]
interval: 30s
timeout: 15s
retries: 3
start_period: 120s
Solution 2: Healthcheck Alternatif
loki:
healthcheck:
test: ["CMD", "sh", "-c", "if wget -q --spider http://localhost:3100/ready; then echo 'Loki ready: Log aggregation service responding'; exit 0; else echo 'Loki starting: Log aggregation service not yet ready'; exit 1; fi"]
interval: 30s
timeout: 15s
retries: 5
start_period: 120s
Solution 3: Healthcheck Simplifié
loki:
healthcheck:
test: ["CMD", "sh", "-c", "wget -q --spider http://localhost:3100/ready"]
interval: 30s
timeout: 15s
retries: 5
start_period: 120s
Solution 4: Configuration Loki Optimisée
loki:
command: -config.file=/etc/loki/local-config.yaml -server.http-listen-port=3100 -server.grpc-listen-port=9096
environment:
- LOKI_READY_DELAY=5s
🧪 Tests de Diagnostic
Test 1: Vérifier la Configuration
# Vérifier la configuration Loki
docker exec loki cat /etc/loki/local-config.yaml
Test 2: Vérifier les Ressources
# Vérifier l'utilisation des ressources
docker stats loki
Test 3: Vérifier les Logs Détaillés
# Logs avec plus de détails
docker logs loki --tail 100
Test 4: Test de Connectivité
# Test depuis l'extérieur
curl -v http://localhost:3100/ready
# Test depuis l'intérieur
docker exec loki wget -q -O- http://localhost:3100/ready
Test 5: Vérifier les Volumes
# Vérifier les permissions des volumes
docker exec loki ls -la /loki
📊 Configuration Recommandée
Healthcheck Optimisé
loki:
image: grafana/loki:latest
container_name: loki
ports:
- "0.0.0.0:3100:3100"
volumes:
- loki_data:/loki
command: -config.file=/etc/loki/local-config.yaml
networks:
btcnet:
aliases:
- loki
healthcheck:
test: ["CMD", "sh", "-c", "if wget -q --spider http://localhost:3100/ready; then echo 'Loki ready: Log aggregation service responding'; exit 0; else echo 'Loki starting: Log aggregation service not yet ready'; exit 1; fi"]
interval: 30s
timeout: 15s
retries: 5
start_period: 120s
restart: unless-stopped
Variables d'Environnement
loki:
environment:
- LOKI_READY_DELAY=5s
- LOKI_LOG_LEVEL=info
🎯 Plan d'Action
Étape 1: Diagnostic Immédiat
- Vérifier la configuration actuelle
- Analyser les logs détaillés
- Tester la connectivité
Étape 2: Application des Corrections
- Augmenter le
start_period
à 120s - Augmenter le
timeout
à 15s - Augmenter les
retries
à 5
Étape 3: Test et Validation
- Redémarrer Loki
- Surveiller le healthcheck
- Vérifier le statut final
Étape 4: Optimisation Continue
- Ajuster les paramètres si nécessaire
- Documenter les améliorations
- Mettre à jour la configuration
🔍 Points d'Attention
Signaux d'Alerte
- Healthcheck qui échoue constamment
- Logs d'erreur dans Loki
- Ressources système élevées
- Timeouts fréquents
Indicateurs de Succès
- Healthcheck "healthy" stable
- Endpoint
/ready
retourne HTTP 200 - Logs Loki normaux
- Performance acceptable
Document créé le 2025-09-21 Version : 1.0 Diagnostic : Loki Unhealthy Analysis