208 lines
5.8 KiB
Markdown
208 lines
5.8 KiB
Markdown
# 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)**
|
|
```yaml
|
|
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**
|
|
```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
|