4NK_env/IA_agents/loki-problem-resolution.md
2025-09-21 22:56:42 +00:00

5.5 KiB

Résolution du Problème Loki Unhealthy

🎯 Problème Résolu

Statut final : Loki est maintenant (healthy)

🔍 Cause Racine Identifiée

Problème Principal : Configuration d'Écoute Incorrecte

# ❌ Configuration par défaut (PROBLÉMATIQUE)
server:
  http_listen_port: 3100
  grpc_listen_port: 9096

common:
  instance_addr: 127.0.0.1  # ← PROBLÈME : Écoute uniquement sur localhost

Impact : Loki n'était accessible que depuis l'intérieur du conteneur (127.0.0.1), mais pas depuis l'extérieur, causant l'échec du healthcheck Docker.

Problème Secondaire : Configuration Incomplète

  • Configuration par défaut de Loki manquait la section ingester
  • Délai de démarrage non configuré (min_ready_duration)
  • Configuration du compactor incorrecte

Solution Appliquée

1. Correction de l'Écoute Réseau

# ✅ Configuration corrigée
server:
  http_listen_port: 3100
  grpc_listen_port: 9096
  http_listen_address: 0.0.0.0  # ← SOLUTION : Écoute sur toutes les interfaces
  grpc_listen_address: 0.0.0.0

common:
  instance_addr: 0.0.0.0  # ← SOLUTION : Adresse sur toutes les interfaces

2. Configuration Ingester Optimisée

ingester:
  lifecycler:
    min_ready_duration: 5s  # Réduit le délai de démarrage de 15s à 5s

3. Configuration Compactor Corrigée

compactor:
  working_directory: /loki/compactor
  compaction_interval: 10m
  retention_enabled: false  # Désactivé pour éviter les erreurs de configuration
  delete_request_store: filesystem

📊 Résultats

Avant la Correction

# Écoute réseau
tcp        0      0 :::3100                 :::*                    LISTEN      1/loki
# Mais seulement accessible depuis l'intérieur du conteneur

# Healthcheck
HEALTHCHECK FAILED
Status: Up X seconds (unhealthy)

Après la Correction

# Écoute réseau
tcp        0      0 :::3100                 :::*                    LISTEN      1/loki
# Accessible depuis l'extérieur ET l'intérieur du conteneur

# Healthcheck
HEALTHCHECK SUCCESS
Status: Up X seconds (healthy)

🔧 Configuration Finale

Fichier : /conf/loki/loki-config.yaml

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096
  http_listen_address: 0.0.0.0
  grpc_listen_address: 0.0.0.0

common:
  instance_addr: 0.0.0.0
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        prefix: index_
        period: 24h

ruler:
  alertmanager_url: http://localhost:9093

ingester:
  lifecycler:
    min_ready_duration: 5s

limits_config:
  reject_old_samples: true
  reject_old_samples_max_age: 168h
  max_cache_freshness_per_query: 10m
  split_queries_by_interval: 15m
  max_query_parallelism: 32
  max_streams_per_user: 0
  max_line_size: 256000
  ingestion_rate_mb: 16
  ingestion_burst_size_mb: 32
  per_stream_rate_limit: 3MB
  per_stream_rate_limit_burst: 15MB
  max_entries_limit_per_query: 5000
  max_query_series: 500
  max_query_length: 721h
  cardinality_limit: 100000
  max_streams_matchers_per_query: 1000
  max_concurrent_tail_requests: 10

storage_config:
  tsdb_shipper:
    active_index_directory: /loki/tsdb-index
    cache_location: /loki/tsdb-cache
  filesystem:
    directory: /loki/chunks

compactor:
  working_directory: /loki/compactor
  compaction_interval: 10m
  retention_enabled: false
  delete_request_store: filesystem

analytics:
  reporting_enabled: false

Docker Compose : Volume Mapping

loki:
  image: grafana/loki:latest
  container_name: loki
  ports:
    - "0.0.0.0:3100:3100"
  volumes:
    - loki_data:/loki
    - ./conf/loki/loki-config.yaml:/etc/loki/loki-config.yaml:ro
  command: -config.file=/etc/loki/loki-config.yaml
  healthcheck:
    test: ["CMD", "wget", "-q", "--spider", "http://localhost:3100/ready"]
    interval: 30s
    timeout: 15s
    retries: 3
    start_period: 120s

🎯 Leçons Apprises

1. Diagnostic Systématique

  • Vérifier l'écoute réseau : netstat -tlnp dans le conteneur
  • Tester la connectivité : Depuis l'extérieur ET l'intérieur du conteneur
  • Analyser les logs : Rechercher les erreurs de configuration

2. Configuration Loki

  • Toujours configurer l'écoute : http_listen_address: 0.0.0.0
  • Configurer l'ingester : Spécifier min_ready_duration
  • Éviter les configurations complexes : Commencer simple, puis optimiser

3. Healthcheck Docker

  • Utiliser l'endpoint approprié : /ready pour Loki
  • Configurer les timeouts : Adapter au délai de démarrage réel
  • Tester manuellement : Vérifier le healthcheck avant de l'automatiser

📝 Commandes de Validation

Vérification de l'Écoute

docker exec loki netstat -tlnp | grep 3100
# Doit montrer : tcp 0 0 :::3100 :::* LISTEN

Test de Connectivité

# Depuis l'extérieur
curl -s -o /dev/null -w "%{http_code}" http://localhost:3100/ready
# Doit retourner : 200

# Depuis l'intérieur
docker exec loki wget -q --spider http://localhost:3100/ready && echo "SUCCESS"
# Doit retourner : SUCCESS

Statut Docker

docker compose --env-file .env.master ps loki
# Doit montrer : (healthy) ✅

Problème résolu le 2025-09-21 Version : 1.0 Statut : RÉSOLU - Loki healthy