Gestion des logs avec Loki
Les logs de pods sont éphémères dans Kubernetes : quand un pod est supprimé, ses logs le sont aussi. En production, il faut une solution de centralisation des logs. Loki (Grafana Labs) est devenu le standard pour les clusters Kubernetes qui utilisent déjà Grafana : même interface, même langage de requête (LogQL proche de PromQL).
Architecture Loki + Promtail
- Promtail : agent (DaemonSet) qui lit les logs des pods sur chaque noeud et les envoie à Loki
- Loki : agrégateur et stockage de logs, indexe uniquement les labels (pas le contenu)
- Grafana : interface de requête et visualisation
Installation avec Helm
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
# Stack Loki + Promtail
helm install loki grafana/loki-stack --namespace monitoring -f loki-values.yaml# loki-values.yaml
loki:
enabled: true
persistence:
enabled: true
size: 50Gi
storageClassName: fast-ssd
config:
limits_config:
retention_period: 720h # 30 jours
promtail:
enabled: true
config:
clients:
- url: http://loki:3100/loki/api/v1/push
grafana:
enabled: false # Déjà installé via kube-prometheus-stackRequêtes LogQL
# Logs d'un namespace
{namespace="production"}
# Logs d'une application
{namespace="production", app="myapp"}
# Filtrer sur le contenu
{app="myapp"} |= "ERROR"
{app="myapp"} |~ "timeout|connection refused"
# Parser les logs JSON et filtrer
{app="myapp"} | json | level="error" | duration > 1s
# Taux d'erreurs par application
sum by (app) (rate({namespace="production"} |= "ERROR" [5m]))
# Logs des conteneurs d'un pod spécifique
{pod="myapp-7d6b9c8f5-xkp2n"}
Configuration Promtail avancée
# Pipeline de parsing pour les logs applicatifs
scrape_configs:
- job_name: kubernetes-pods
kubernetes_sd_configs:
- role: pod
pipeline_stages:
- docker: {} # Parser le format Docker JSON
- match:
selector: '{app="myapp"}'
stages:
- json:
expressions:
level: level
msg: message
ts: timestamp
- labels:
level: # Ajouter le level comme label LokiAlternatives
- Fluent Bit + Elasticsearch (EFK) : plus puissant pour les transformations complexes, plus lourd à opérer. Kibana pour la visualisation.
- Vector : agrégateur de logs moderne (Rust), très performant, supporte de nombreuses sources et destinations.
- OpenTelemetry Collector : tend à devenir le standard pour unifier logs, métriques et traces.
Loki est le choix le plus naturel pour un cluster qui utilise déjà Prometheus et Grafana : on évite un Elasticsearch coûteux en ressources pour centraliser uniquement des logs.