# 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 de `0.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` et `instance_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)** ```yaml 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** ```yaml 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é** ```yaml 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** ```yaml 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** ```bash # Vérifier la configuration Loki docker exec loki cat /etc/loki/local-config.yaml ``` ### **Test 2: Vérifier les Ressources** ```bash # Vérifier l'utilisation des ressources docker stats loki ``` ### **Test 3: Vérifier les Logs Détaillés** ```bash # Logs avec plus de détails docker logs loki --tail 100 ``` ### **Test 4: Test de Connectivité** ```bash # 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** ```bash # Vérifier les permissions des volumes docker exec loki ls -la /loki ``` ## 📊 Configuration Recommandée ### **Healthcheck Optimisé** ```yaml 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** ```yaml loki: environment: - LOKI_READY_DELAY=5s - LOKI_LOG_LEVEL=info ``` ## 🎯 Plan d'Action ### **Étape 1: Diagnostic Immédiat** 1. Vérifier la configuration actuelle 2. Analyser les logs détaillés 3. Tester la connectivité ### **Étape 2: Application des Corrections** 1. Augmenter le `start_period` à 120s 2. Augmenter le `timeout` à 15s 3. Augmenter les `retries` à 5 ### **Étape 3: Test et Validation** 1. Redémarrer Loki 2. Surveiller le healthcheck 3. Vérifier le statut final ### **Étape 4: Optimisation Continue** 1. Ajuster les paramètres si nécessaire 2. Documenter les améliorations 3. 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