align for IA agents + grafana

This commit is contained in:
LeCoffre Deployment 2025-09-21 22:56:42 +00:00
parent ba422bae3c
commit a11ecc80de
6 changed files with 266 additions and 34 deletions

View File

@ -205,6 +205,12 @@ docker logs bitcoin
- Tous les scripts utilisent `--env-file .env.master` - Tous les scripts utilisent `--env-file .env.master`
- Pas de fichiers `.env` dispersés - Pas de fichiers `.env` dispersés
### **Configuration Loki (CRITIQUE)**
- **OBLIGATOIRE** : `http_listen_address: 0.0.0.0` (pas 127.0.0.1)
- **OBLIGATOIRE** : `instance_addr: 0.0.0.0` (pas 127.0.0.1)
- **RECOMMANDÉ** : `min_ready_duration: 5s` pour l'ingester
- **Fichier** : `/conf/loki/loki-config.yaml` avec configuration complète
## 📝 Validation et Tests ## 📝 Validation et Tests
### **Tests de Déploiement** ### **Tests de Déploiement**

View File

@ -14,54 +14,56 @@ Loki a un **délai d'attente de 15 secondes** après être "prêt" avant que l'e
## 🚨 Raisons Possibles pour Loki Unhealthy ## 🚨 Raisons Possibles pour Loki Unhealthy
### **1. Délai de Démarrage Insuffisant (PRINCIPAL)** ### **1. Configuration Réseau Incorrecte (CAUSE RACINE) ✅**
```bash - **Problème** : Loki écoute sur `127.0.0.1` au lieu de `0.0.0.0`
# Configuration actuelle - **Cause** : Configuration par défaut limite l'accès au localhost uniquement
start_period: 60s - **Impact** : Healthcheck Docker ne peut pas accéder à l'endpoint depuis l'extérieur
interval: 30s - **Solution** : Configurer `http_listen_address: 0.0.0.0` et `instance_addr: 0.0.0.0`
timeout: 10s
retries: 3
```
**Problème** : Loki prend plus de 60 secondes pour être complètement prêt ### **2. Configuration Ingester Manquante ✅**
**Solution** : Augmenter le `start_period` - **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`
### **2. Configuration Loki Incomplète** ### **3. Commande Healthcheck Incompatible ✅**
- Fichier de configuration manquant ou incorrect - **Problème** : `curl` non disponible dans le conteneur Loki
- Variables d'environnement non définies - **Cause** : Image Loki ne contient pas curl par défaut
- Permissions sur les volumes incorrectes - **Solution** : Utiliser `wget` (disponible dans l'image)
### **3. Ressources Système Insuffisantes** ### **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 - Mémoire insuffisante pour Loki
- CPU surchargé - CPU surchargé
- Espace disque insuffisant - Espace disque insuffisant
### **4. Problème de Réseau** ### **6. Configuration Healthcheck Inadéquate**
- Port 3100 bloqué ou en conflit
- Configuration réseau Docker incorrecte
- Firewall bloquant les connexions
### **5. Configuration Healthcheck Incorrecte**
- Timeout trop court (10s) - Timeout trop court (10s)
- Intervalle trop fréquent (30s) - Intervalle trop fréquent (30s)
- Retries insuffisantes (3) - 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 ## 🔧 Solutions Proposées
### **Solution 1: Augmenter le Start Period (RECOMMANDÉE)** ### **Solution 1: Configuration Réseau Correcte (RÉSOLUTION DÉFINITIVE)**
```yaml ```yaml
loki: 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: 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"] test: ["CMD", "wget", "-q", "--spider", "http://localhost:3100/ready"]
interval: 30s interval: 30s
timeout: 15s # Augmenté de 10s à 15s timeout: 15s
retries: 5 # Augmenté de 3 à 5 retries: 3
start_period: 120s # Augmenté de 60s à 120s start_period: 120s
``` ```
### **Solution 2: Healthcheck Alternatif** ### **Solution 2: Healthcheck Alternatif**

View File

@ -0,0 +1,224 @@
# 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**
```yaml
# ❌ 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**
```yaml
# ✅ 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**
```yaml
ingester:
lifecycler:
min_ready_duration: 5s # Réduit le délai de démarrage de 15s à 5s
```
### **3. Configuration Compactor Corrigée**
```yaml
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**
```bash
# É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**
```bash
# É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`**
```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**
```yaml
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**
```bash
docker exec loki netstat -tlnp | grep 3100
# Doit montrer : tcp 0 0 :::3100 :::* LISTEN
```
### **Test de Connectivité**
```bash
# 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**
```bash
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

View File

@ -6,7 +6,7 @@
Déploie l'architecture LeCoffre Node complète en respectant strictement les consignes de déploiement. Déploie l'architecture LeCoffre Node complète en respectant strictement les consignes de déploiement.
Arrete et nettoie tous les services, images, tests, commandes, éditions... encore actives avant de relancer proprement. Arrete et nettoie tous les services, images, tests, commandes, éditions... encore actives avant de relancer proprement.
Toujours veiller à supprimer les fichiers distants non suivis Toujours veiller à supprimer les fichiers distants non suivis
A la fin met bien à jour les documents de `IA_agents/` et ses sous dossiers. A la fin met bien à jour les documents de `IA_agents/` et ses sous dossiers, corrigés et complétés.
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. 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 sans alternative manuelle (sauf pour tester, mais il faudra corriger quand même). Important : ne simplifie jamais face à un problème mais résout le sans alternative manuelle (sauf pour tester, mais il faudra corriger quand même).

View File

@ -59,7 +59,7 @@ docker inspect --format='{{.State.Health.Status}}' <service>
| LeCoffre Frontend | lecoffre-front | 3000 | Interface utilisateur | | LeCoffre Frontend | lecoffre-front | 3000 | Interface utilisateur |
| IHM Client | ihm_client | 3003 | Client IHM | | IHM Client | ihm_client | 3003 | Client IHM |
| Grafana | grafana | 3005 | Dashboard | | Grafana | grafana | 3005 | Dashboard |
| Loki | loki | 3100 | Agrégation de logs | | Loki | loki | 3100 | Agrégation de logs (config: 0.0.0.0) |
| Promtail | promtail | 9080 | Collection de logs | | Promtail | promtail | 9080 | Collection de logs |
| Status API | status-api | 3006 | API de statut | | Status API | status-api | 3006 | API de statut |

@ -1 +1 @@
Subproject commit b029693c55983350d7d28eb89830024ce6c99dc1 Subproject commit 2a2ab66f2dd70d98133bc86b46b0e27355891599