align for IA agents + grafana
This commit is contained in:
parent
ba422bae3c
commit
a11ecc80de
@ -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**
|
||||||
|
@ -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**
|
||||||
|
224
IA_agents/loki-problem-resolution.md
Normal file
224
IA_agents/loki-problem-resolution.md
Normal 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
|
@ -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).
|
||||||
|
|
||||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user