4NK_env/IA_agents/diagnostic-loki-unhealthy.md
2025-09-21 23:17:22 +00:00

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 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)

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

  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