diff --git a/IA_agents/diagnostic-loki-unhealthy.md b/IA_agents/diagnostic-loki-unhealthy.md new file mode 100644 index 0000000..7d6c3ca --- /dev/null +++ b/IA_agents/diagnostic-loki-unhealthy.md @@ -0,0 +1,205 @@ +# 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. Délai de Démarrage Insuffisant (PRINCIPAL)** +```bash +# Configuration actuelle +start_period: 60s +interval: 30s +timeout: 10s +retries: 3 +``` + +**Problème** : Loki prend plus de 60 secondes pour être complètement prêt +**Solution** : Augmenter le `start_period` + +### **2. Configuration Loki Incomplète** +- Fichier de configuration manquant ou incorrect +- Variables d'environnement non définies +- Permissions sur les volumes incorrectes + +### **3. Ressources Système Insuffisantes** +- Mémoire insuffisante pour Loki +- CPU surchargé +- Espace disque insuffisant + +### **4. Problème de Réseau** +- Port 3100 bloqué ou en conflit +- Configuration réseau Docker incorrecte +- Firewall bloquant les connexions + +### **5. Configuration Healthcheck Incorrecte** +- Timeout trop court (10s) +- Intervalle trop fréquent (30s) +- Retries insuffisantes (3) + +### **6. Problème de Configuration Loki** +- Configuration par défaut inadaptée +- Paramètres de stockage incorrects +- Configuration des composants (ingester, distributor, etc.) + +## 🔧 Solutions Proposées + +### **Solution 1: Augmenter le Start Period (RECOMMANDÉE)** +```yaml +loki: + healthcheck: + test: ["CMD", "sh", "-c", "if curl -f http://localhost:3100/ready >/dev/null 2>&1; 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 # Augmenté de 10s à 15s + retries: 5 # Augmenté de 3 à 5 + start_period: 120s # Augmenté de 60s à 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 diff --git a/IA_agents/loki-health-starting-analysis.md b/IA_agents/loki-health-starting-analysis.md new file mode 100644 index 0000000..117d143 --- /dev/null +++ b/IA_agents/loki-health-starting-analysis.md @@ -0,0 +1,174 @@ +# 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** +```bash +# 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 : +1. **Configuration** : Lecture du fichier de configuration +2. **Stockage** : Initialisation des volumes et index +3. **Ingester** : Composant de réception des logs +4. **Distributor** : Composant de distribution +5. **Query Frontend** : Interface de requête +6. **Table Manager** : Gestion des tables d'index + +### **3. Processus de Démarrage Observé** +```bash +# 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** +1. **Problème de timing** : Healthcheck s'exécute à un mauvais moment +2. **Problème d'environnement** : Différence d'environnement d'exécution +3. **Problème de cache Docker** : Cache healthcheck corrompu +4. **Problème de réseau interne** : Connectivité réseau Docker + +## 🔧 Solutions Proposées + +### **Solution 1: Healthcheck Simplifié (RECOMMANDÉE)** +```yaml +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é** +```yaml +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)** +```yaml +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)** +```yaml +# 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** +1. **Simplifier le healthcheck** pour éliminer les variables +2. **Augmenter les timeouts** si nécessaire +3. **Surveiller les logs** pendant le démarrage + +### **À Moyen Terme** +1. **Optimiser la configuration Loki** pour un démarrage plus rapide +2. **Ajuster les ressources** (mémoire, CPU) si nécessaire +3. **Documenter les patterns** de démarrage observés + +### **Monitoring** +1. **Surveiller la durée** de démarrage +2. **Alerter** si le démarrage prend plus de 2 minutes +3. **Documenter** les variations de performance + +## 🔍 Diagnostic Continue + +### **Commandes Utiles** +```bash +# 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 diff --git a/IA_agents/prompts/prompt-deploy.md b/IA_agents/prompts/prompt-deploy.md index 4b196d5..aaea8bb 100644 --- a/IA_agents/prompts/prompt-deploy.md +++ b/IA_agents/prompts/prompt-deploy.md @@ -8,6 +8,7 @@ Arrete et nettoie tous les services, images, tests, commandes, éditions... enco Toujours veiller à supprimer les fichiers distants non suivis A la fin met bien à jour les documents de `IA_agents/` et ses sous dossiers. Si un processus est en attente alors utiliser les scripts de monitoring, si ils sont peu utiles pour comprendre la raison de l'attente ou la progression, alors améliore les. +Important : ne simplifie jamais face à un problème mais résout le ## Contexte obligatoire - Consulte attentivement et chacun des documents de `IA_agents/` diff --git a/lecoffre_node b/lecoffre_node index 0ee0505..56a46a5 160000 --- a/lecoffre_node +++ b/lecoffre_node @@ -1 +1 @@ -Subproject commit 0ee0505ce53085ff1249d19ebc2caf43c06156ad +Subproject commit 56a46a516ca33b467f1f51932f6fb9a533628c0f