Gestion des logs Docker : enjeux, solutions et tendances — Guide complet
Tour d'horizon exhaustif de la gestion des logs dans des environnements Docker : fonctionnement natif, collecteurs, backends, stacks classiques, tendances 2025-2026, bonnes pratiques.
Quand on fait tourner quelques conteneurs en développement, les logs ne sont pas un sujet. Un docker logs suffit. Mais dès qu’on passe à 50, 100, 200+ conteneurs en production — des sites Astro derrière un reverse proxy, par exemple — la question devient critique : où vont les logs ? Comment les chercher ? Comment éviter qu’ils remplissent le disque ? Comment corréler un problème à travers des dizaines de services ?
Cet article est un tour d’horizon complet : comment Docker gère les logs nativement, pourquoi c’est insuffisant, quelles solutions existent, comment elles s’articulent, et lesquelles choisir en 2026.
1. Comment Docker gère les logs nativement
STDOUT, STDERR, et le logging driver
Docker capture tout ce qu’un conteneur écrit sur STDOUT et STDERR et le route via un logging driver configurable. C’est le mécanisme fondamental : les applications n’écrivent pas dans des fichiers de log — elles écrivent sur la sortie standard, et Docker se charge du reste.
Il existe quatre catégories de logs Docker :
- Logs conteneur — la sortie des applications (STDOUT/STDERR)
- Logs du démon Docker — les logs système du Docker Engine
- Logs de service — les logs des services Docker Swarm
- Logs de build — les informations générées pendant la construction des images
Docker propose 10 logging drivers :
| Driver | Description |
|---|---|
json-file | JSON local — driver par défaut |
local | Format optimisé avec rotation intégrée |
none | Aucun log |
syslog | Envoi vers un démon syslog |
journald | Envoi vers systemd journald |
fluentd | Envoi vers Fluentd (forward input) |
gelf | Envoi vers un endpoint GELF (Graylog) |
awslogs | Envoi vers Amazon CloudWatch |
splunk | Envoi vers Splunk via HTTP Event Collector |
etwlogs | Event Tracing for Windows (Windows uniquement) |
Le driver par défaut : json-file
Chaque entrée de log est stockée en JSON avec le message, le flux d’origine (stdout/stderr) et un timestamp ISO 8601. Les options clés :
max-size: seuil de rotation. Par défaut :-1(illimité) — les logs grossissent sans limite.max-file: nombre de fichiers conservés. Effectif uniquement simax-sizeest défini.compress: compression gzip des fichiers rotatés (désactivé par défaut).
Attention : sans configuration explicite de
max-size, un seul conteneur bavard peut remplir le disque et faire tomber l’hôte entier. C’est la surprise opérationnelle la plus courante avec Docker. Source : Docker Docs — JSON File logging driver
Configuration globale dans daemon.json :
{
"log-driver": "local",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Configuration par conteneur :
docker run --log-driver local --log-opt max-size=10m --log-opt max-file=3 nginx
Les conteneurs existants n’adoptent pas les nouvelles configurations du démon — seuls les conteneurs nouvellement créés utilisent les paramètres mis à jour. Source : Docker Docs — Configure logging drivers
Mode blocking vs non-blocking
Mode blocking (par défaut) : le conteneur est interrompu à chaque écriture de log en attendant que le driver les traite. Cela garantit qu’aucun log n’est perdu, mais peut introduire de la latence — surtout avec des drivers réseau (awslogs, splunk, fluentd).
Mode non-blocking : les messages sont écrits dans un ring buffer en mémoire (1 Mo par défaut, configurable via max-buffer-size), puis envoyés au driver de manière asynchrone. Pas de blocage de l’application, mais risque de perte de logs si le buffer se remplit.
La recommandation de Datadog : utiliser json-file ou local en mode blocking (écritures locales rapides), et le mode non-blocking uniquement pour les drivers réseau où la latence pourrait dégrader l’application.
Dual logging
Depuis Docker Engine 20.10+, le dual logging maintient automatiquement un cache local en parallèle des drivers de logging distants. Sans cette fonctionnalité, utiliser un driver comme fluentd ou awslogs empêchait d’utiliser docker logs. Le cache local est limité à 5 fichiers de 20 Mo chacun (avant compression) par conteneur, avec rotation automatique.
Les limites natives de Docker
Docker n’est pas un système de gestion de logs. Ses limites sont fondamentales :
- Pas de rotation par défaut — le driver
json-filelaisse les logs grossir indéfiniment - Pas d’agrégation — chaque conteneur est isolé, aucun mécanisme ne centralise les logs
- Pas de recherche —
docker logssupporte uniquement--tail,--since/--until, et--follow. Pas de full-text search, pas de regex, pas de requêtes sur des champs - Pas de structuration — Docker ne valide ni ne normalise le format des messages
docker logsà l’échelle — sur beaucoup de conteneurs, cette commande surcharge le démon Docker et peut empêcher les opérations de création/suppression de conteneurs- Décompression coûteuse — quand
compressest activé,docker logsdécompresse tous les fichiers simultanément sur disque (moby/moby#41678)
2. Les enjeux de la gestion des logs conteneurisés
Conteneurs éphémères
Les conteneurs sont éphémères par conception : ils peuvent être créés, détruits et recréés à tout moment. Quand un conteneur est supprimé, ses logs disparaissent avec lui. Dans un environnement de production avec des déploiements fréquents, c’est un risque direct de perte de données d’observabilité. Source : CrowdStrike — Docker Logging Guide
Volume de logs
Dans une architecture micro-services ou multi-sites, des dizaines ou centaines de conteneurs génèrent des logs simultanément. Sans rotation (désactivée par défaut dans Docker), les logs s’accumulent et peuvent épuiser l’espace disque, potentiellement en faisant tomber l’hôte — et avec lui, tous les conteneurs.
Corrélation multi-conteneurs
Les logs existent à deux niveaux — logs conteneur et logs système hôte — et les corréler exige des identifiants partagés. Sans request ID, trace ID ou labels de conteneur, retrouver le parcours d’une requête à travers 200 conteneurs est impossible. Source : SigNoz — Docker Logging
Structuré vs non structuré
Les applications émettent des logs dans des formats variés : texte brut, JSON, formats custom. Sans cohérence, le parsing, la recherche et l’analyse deviennent exponentiellement difficiles à l’échelle. Le logging structuré (JSON avec des champs cohérents) est particulièrement critique en environnement conteneurisé pour permettre l’agrégation et l’analyse.
Performance et backpressure
Le logging lui-même consomme des ressources. En mode blocking, un driver lent ou indisponible peut bloquer l’application. En mode non-blocking, le ring buffer consomme de la mémoire. La rotation avec compression augmente temporairement la consommation CPU et disque. Des valeurs max-size trop petites provoquent des rotations fréquentes qui dégradent les performances pendant les pics de trafic.
Données sensibles
Les logs peuvent accidentellement contenir des mots de passe, tokens, données personnelles. Il faut systématiquement implémenter du masquage ou du filtrage — soit au niveau de l’application (le mieux), soit au niveau du collecteur.
3. Logs, métriques, traces : les trois piliers de l’observabilité
Monitoring vs observabilité
Le monitoring collecte des données sur des métriques prédéfinies et déclenche des alertes quand des seuils sont dépassés. Il répond au “quand” et “quoi” : quelque chose ne va pas. C’est fondamentalement réactif. Source : AWS — Observability vs Monitoring
L’observabilité est la capacité à comprendre l’état interne d’un système en analysant les données qu’il génère. Elle répond au “quoi et pourquoi”, et permet d’investiguer des problèmes qui n’avaient pas été anticipés — les “unknown unknowns”. C’est fondamentalement proactif. Source : IBM — Observability vs Monitoring
Le monitoring est une composante de l’observabilité, pas un substitut.
Les trois piliers
| Pilier | Ce que c’est | Idéal pour |
|---|---|---|
| Logs | Enregistrements horodatés d’événements discrets (texte, JSON, binaire) | Debugging, analyse forensique, audit |
| Métriques | Mesures numériques de performance sur le temps (CPU, mémoire, latence, taux d’erreur) | Alerting, dashboards, tendances, capacity planning |
| Traces | Représentations de requêtes individuelles traversant un système distribué | Identifier les goulots d’étranglement, cartographier les dépendances |
Comment ils fonctionnent ensemble : les métriques alertent l’équipe qu’il y a un problème, les traces montrent le chemin d’exécution des requêtes affectées, et les logs fournissent le contexte détaillé nécessaire pour résoudre la cause racine. Source : CrowdStrike — Three Pillars of Observability
Niveaux de log (RFC 5424)
Le RFC 5424 (Syslog Protocol) définit huit niveaux de sévérité :
| Code | Sévérité | Description |
|---|---|---|
| 0 | Emergency | Système inutilisable |
| 1 | Alert | Action immédiate requise |
| 2 | Critical | Conditions critiques |
| 3 | Error | Conditions d’erreur |
| 4 | Warning | Conditions d’avertissement |
| 5 | Notice | Normal mais significatif |
| 6 | Informational | Messages informatifs |
| 7 | Debug | Messages de débogage |
La plupart des frameworks applicatifs simplifient à six niveaux : TRACE, DEBUG, INFO, WARN, ERROR, FATAL.
OpenTelemetry : le standard unificateur
OpenTelemetry (OTel) est le projet de la CNCF qui standardise la collecte des trois signaux (logs, métriques, traces) de manière vendor-neutre via le protocole OTLP. C’est le deuxième projet le plus actif de la CNCF après Kubernetes, avec plus de 4 000 contributeurs.
En 2025, la spécification OTLP est stable pour les trois signaux. ~50% des entreprises cloud-native interrogées par la CNCF ont adopté OpenTelemetry, et 85% investissent dedans. Sources : CNCF — OpenTelemetry, Grafana Labs — Observability Survey 2025]
4. La couche collecte : comment acheminer les logs
C’est ici que ça commence à devenir intéressant. Entre les conteneurs qui émettent des logs et le backend qui les stocke, il faut un collecteur — un agent qui découvre, parse, filtre, enrichit et transmet les logs. Voici les options.
Fluentd
- Langage : C (couche réseau/sérialisation) + Ruby (plugins)
- Architecture : pipeline Input → Filter → Buffer → Output avec routage basé sur des tags
- Écosystème : 1 000+ plugins connectant à Docker, Kubernetes, Google Cloud, AWS, bases de données, etc.
- Performance : ~30-40 Mo de mémoire, ~13 000 événements/seconde/core
- CNCF : projet Graduated depuis avril 2019
- Licence : Apache 2.0
Fluentd a sacrifié un peu de vitesse brute au profit d’un écosystème de plugins massif grâce à Ruby. C’est un excellent choix comme agrégateur central, mais il est relativement lourd pour un agent edge. [Sources : Fluentd Architecture, CNCF Graduation]
Fluent Bit
- Langage : C pur, zéro dépendance externe
- Mémoire : ~450 Ko (oui, kilo-octets)
- Architecture : même pipeline que Fluentd mais en binaire unique avec plugins intégrés
- Performance : 10-40x supérieure à Fluentd en throughput
- CNCF : sous-projet Graduated de Fluentd, 15+ milliards de pulls Docker
- Licence : Apache 2.0
Fluent Bit est conçu pour tourner comme agent léger sur chaque nœud (DaemonSet en Kubernetes, sidecar en Docker). Le pattern classique : Fluent Bit en edge → Fluentd en agrégateur → backend. [Sources : Fluent Bit Manual, CNCF Migration Guide]
Logstash
- Langage : JRuby sur la JVM
- Overhead : heap minimum recommandé 4 Go, startup 30+ secondes
- Points forts : parsing de données non structurées très puissant, pipelines multiples indépendantes depuis v6.x, queue persistante sur disque
- Limites : la JVM consomme 50-70% de la RAM disponible, le GC peut introduire des pics de latence
- Licence : Apache 2.0 (core) / Elastic License v2 (x-pack)
Logstash reste pertinent quand on a besoin de transformations complexes sur des données hétérogènes, mais son empreinte mémoire le disqualifie comme agent léger. [Sources : Logstash JVM Settings, Performance Tuning]
Vector
- Langage : Rust — pas de garbage collector, mémoire prédictible
- Performance : revendique jusqu’à 10x plus rapide que les alternatives, publie régulièrement des benchmarks montrant 10M+ événements/seconde en forwarding
- Particularité : Vector Remap Language (VRL) pour des transformations type-safe
- Origine : créé par Timber, acquis par Datadog
- Licence : MPL 2.0 (Mozilla Public License)
Vector est le challenger performant de l’écosystème. La communauté le positionne de plus en plus comme remplacement de Fluent Bit/Fluentd pour les pipelines à haute exigence de performance. Le fait qu’il soit maintenu par Datadog soulève des questions de neutralité chez certains.
Filebeat
- Langage : Go (famille Beats d’Elastic)
- Architecture : un harvester par fichier, registre d’état pour reprise fiable, protocole sensible à la backpressure
- Mémoire : ~10-15 Mo
- Points forts : modules pré-construits pour les formats courants (Nginx, Apache, MySQL), très simple à configurer
- Limites : capacités de transformation limitées, couplé à l’écosystème Elastic
- Licence : Apache 2.0 (core) / Elastic License v2 (x-pack)
Source : Elastic — Filebeat Reference
OpenTelemetry Collector
- Langage : Go
- Architecture : pipeline Receivers → Processors → Exporters, supporte les trois signaux (logs, métriques, traces)
- Protocole : OTLP (gRPC port 4317, HTTP port 4318)
- Distributions : Core (minimal, stable) et Contrib (composants communautaires)
- Particularité : vendor-neutral — exporte vers n’importe quel backend (Elasticsearch, Loki, ClickHouse, Jaeger, Kafka, tout SaaS…)
- CNCF : en cours de graduation (candidature 2024), deuxième projet le plus actif
- Licence : Apache 2.0
L’OTel Collector est le choix évident pour les architectures qui veulent rester indépendantes du backend. Le support des logs est stable mais plus récent que celui des traces et métriques. [Sources : OTel Collector Architecture, OTLP Specification]
Grafana Alloy
- Langage : Go
- Remplace : Promtail (EOL mars 2026) et Grafana Agent
- Particularité : distribution du OpenTelemetry Collector par Grafana Labs — agent unique pour logs, métriques, traces et profiling
- Compatibilité : OTLP natif, compatible Prometheus et Loki
- Migration :
alloy convert --config.format=promtailpour migrer automatiquement - Licence : Apache 2.0
Important : Promtail est entré en LTS en février 2025 et sera EOL le 2 mars 2026. Les nouvelles installations doivent utiliser Alloy.
[Sources : Grafana Alloy Docs, Grafana Agent to Alloy FAQ]
Comparatif des collecteurs
| Collecteur | Langage | RAM | Throughput | Idéal pour | Licence |
|---|---|---|---|---|---|
| Fluent Bit | C | ~450 Ko | Très élevé | Edge, IoT, sidecar | Apache 2.0 |
| Vector | Rust | 100-200 Mo | Le plus élevé | Pipelines haute perf | MPL 2.0 |
| Filebeat | Go | 10-15 Mo | Élevé | Écosystème Elastic | Apache 2.0 / ELv2 |
| Grafana Alloy | Go | 150-300 Mo | Élevé | Écosystème Grafana, OTel | Apache 2.0 |
| OTel Collector | Go | 150-300 Mo | Élevé | Vendor-neutral, multi-signaux | Apache 2.0 |
| Fluentd | C + Ruby | 200-500 Mo | Moyen | Agrégation, plugins riches | Apache 2.0 |
| Logstash | JRuby/JVM | 4+ Go | Moyen | Transformations complexes | Apache 2.0 / ELv2 |
[Sources : IBM Cloud — Log Collectors Performance Benchmarking, Onidel — Fluent Bit vs Vector vs Logstash 2025]
5. La couche stockage : où stocker les logs
Elasticsearch
- Type : moteur de recherche distribué basé sur Apache Lucene
- Indexation : full-text — chaque mot de chaque document est indexé (index inversé)
- Requêtes : extrêmement expressives (full-text search, agrégations, fuzzy matching)
- Ressources : JVM avec heap de 50-70% de la RAM, minimum 16 Go RAM par nœud en production, 3+ nœuds
- Scaling : gestion des shards complexe, architecture hot-warm-cold nécessaire, ILM (Index Lifecycle Management) à maîtriser
La controverse des licences : en janvier 2021 (v7.11), Elastic a changé la licence d’Elasticsearch d’Apache 2.0 vers SSPL + Elastic License v2 — déclenchant le fork OpenSearch par AWS. En septembre 2024, Elastic a ajouté AGPLv3 comme troisième option, le rendant techniquement “open source” à nouveau. Aujourd’hui, Elasticsearch est triple-licencié : SSPL 1.0 / Elastic License v2 / AGPLv3 (au choix). [Sources : Elastic Licensing FAQ, Elastic License v2 Blog]
OpenSearch
Fork d’Elasticsearch créé par AWS après le changement de licence. Compatible avec les API Elasticsearch 7.x, maintenu sous Apache 2.0. En pratique, l’écosystème est plus petit qu’Elasticsearch et les deux projets divergent de plus en plus. Source : Pureinsights — Elasticsearch vs OpenSearch in 2025
Grafana Loki
- Philosophie : “Like Prometheus, but for logs” — indexe uniquement les labels (métadonnées), pas le contenu des logs
- Index : typiquement 1-2% de la taille totale des logs (contre parfois plus de 100% pour Elasticsearch)
- Stockage : les logs sont compressés et stockés dans du object storage bon marché (S3, GCS, MinIO)
- Requêtes : via LogQL — doivent toujours commencer par un sélecteur de labels, puis optionnellement filtrer le contenu
- Architecture : microservices découplés (lecture/écriture séparées), peut tourner en mode monolithique ou distribué
| Aspect | Loki | Elasticsearch |
|---|---|---|
| Indexation | Labels uniquement | Full-text (chaque mot) |
| Taille de l’index | 1-2% des logs | Peut dépasser la taille des données brutes |
| Coût stockage | Très faible (object storage) | Élevé (SSD locaux) |
| Flexibilité de requête | Scopé par labels, puis grep | Full-text search sur tout champ |
| Complexité opérationnelle | Faible | Élevée |
Attention à la haute cardinalité : des labels avec des valeurs uniques (user ID, request ID) font exploser l’index de Loki et dégradent sévèrement les performances. Les labels doivent être à faible cardinalité (nom du service, environnement, niveau de log).
- Licence : AGPLv3
[Sources : Loki Labels Guide, Loki vs Elasticsearch — SigNoz, Loki Architecture — DevOpsCube]
ClickHouse
- Type : base de données OLAP columnaire écrite en C++
- Compression : ratios moyens de 15-20x, 12-19x meilleur qu’Elasticsearch
- Performances : requêtes analytiques 5-30x plus rapides qu’Elasticsearch, ingestion de millions de lignes/seconde
- Haute cardinalité : gère nativement les champs à haute cardinalité (user_id, trace_id, IP) — quelque chose que Loki ne sait pas faire
- Adopteurs : OpenAI (requêtes sub-seconde), Anthropic, Netflix, Cloudflare, Uber
ClickStack (lancé mai 2025) : stack d’observabilité open source complète basée sur ClickHouse, après l’acquisition de HyperDX. Positionnée comme alternative self-hosted à Datadog.
Cloudflare a migré d’Elasticsearch vers ClickHouse : consommation CPU/mémoire réduite de 8x, stockage de 600 à 60 octets par ligne (10x). Source : Cloudflare Engineering Blog
- Licence : Apache 2.0
[Sources : ClickHouse Observability, ClickStack announcement]
Graylog
- Type : plateforme complète de gestion de logs (collecte, stockage, recherche, visualisation, alerting)
- Architecture : construit sur Elasticsearch/OpenSearch (stockage) + MongoDB (métadonnées)
- GELF : protocole propriétaire de logging structuré JSON, supportant compression et chunking
- Points forts : solution tout-en-un avec alerting intégré, gestion des utilisateurs/rôles
- Limites : hérite des défis de scaling d’Elasticsearch, dépend de MongoDB, GELF est spécifique à Graylog
- Licence : SSPL depuis v4.0 — non considéré open source par l’OSI
Apache Kafka (comme buffer de logs)
Kafka n’est pas un système de stockage de logs — c’est une plateforme de streaming distribuée qui sert de buffer durable entre les producteurs et les consommateurs de logs :
Apps → Agents (Fluentd/Filebeat) → Kafka Topics → Consommateurs (Logstash/Vector) → Stockage (ES/Loki/CH)
Pourquoi l’utiliser : absorption de backpressure (lisse les pics de trafic), découplage producteurs/consommateurs, capacité de rejeu, multi-consommateurs (mêmes données vers plusieurs backends). Des millions de messages/seconde/cluster.
Quand l’utiliser : à grande échelle, quand les pics de trafic sont significatifs et que le découplage est important. Ajoute de la complexité opérationnelle (ZooKeeper/KRaft) et de la latence au pipeline.
- Licence : Apache 2.0
Source : Apache Kafka — Use Cases
VictoriaLogs
Mention émergente qui mérite attention :
- Type : binaire unique de stockage de logs avec indexation automatique et full-text search
- Performances : 94% de latence de requête en moins que Loki, ~40% de stockage en moins, <50% CPU/RAM
- Particularité : tourne efficacement même sur un Raspberry Pi
- Idéal pour : installations minimales, équipes voulant du full-text search sans la complexité d’Elasticsearch
- Licence : Apache 2.0
[Sources : VictoriaLogs vs Loki — TrueFoundry, ITNEXT — VictoriaLogs vs Loki]
Comparatif des backends
| Backend | Indexation | Requêtes | Ressources | Idéal pour | Licence |
|---|---|---|---|---|---|
| Elasticsearch | Full-text | Très expressives | Élevées (JVM) | Recherche textuelle, compliance | SSPL / ELv2 / AGPLv3 |
| OpenSearch | Full-text | Comme ES 7.x | Élevées (JVM) | Drop-in replacement ES | Apache 2.0 |
| Loki | Labels seuls | LogQL (label-first) | Faibles | K8s-native, coût minimal | AGPLv3 |
| ClickHouse | Colonnes | SQL analytique | Moyennes | Analytics, haute cardinalité | Apache 2.0 |
| Graylog | Full-text (via ES) | Elasticsearch syntax | Élevées | Tout-en-un avec alerting | SSPL |
| VictoriaLogs | Auto + full-text | LogsQL | Très faibles | Setup minimal, self-hosted | Apache 2.0 |
6. La couche visualisation et requêtage
Kibana (pour Elasticsearch)
Interface de visualisation et d’exploration riche pour Elasticsearch : Kibana Lens (drag-and-drop), Discover (exploration interactive des logs), dashboards, machine learning (détection d’anomalies), alerting, live tailing, APM, SIEM. C’est l’outil le plus mature pour l’exploration de logs full-text.
Limites : couplé à Elasticsearch, application Node.js gourmande en ressources, fonctionnalités avancées payantes.
- Licence : SSPL 1.0 / Elastic License v2 / AGPLv3
Source : Elastic — Kibana Features
Grafana (multi-sources)
Dashboard universel d’observabilité avec 100+ sources de données : Loki, Elasticsearch, Prometheus, ClickHouse, etc. Explore mode pour la navigation ad-hoc dans les logs, corrélations logs/métriques/traces, alerting unifié, Logs Drilldown (navigation sans requête).
Le stack LGTM (Loki + Grafana + Tempo + Mimir) offre une plateforme d’observabilité complète. Grafana est devenu le standard de facto pour la visualisation d’observabilité open source.
- Licence : AGPLv3
[Sources : Grafana Loki Data Source, Grafana Licensing]
Graylog Web UI
Interface intégrée de Graylog : recherche avec la syntaxe Elasticsearch, dashboards, organisation par streams, éditeur de pipeline rules, alerting intégré. Tout-en-un mais moins sophistiqué que Kibana ou Grafana.
7. Les stacks classiques et leurs tradeoffs
ELK : Elasticsearch + Logstash + Kibana
Apps → Logstash (ingestion/transformation) → Elasticsearch (stockage/index) → Kibana (visualisation)
Forces : full-text search puissant, transformations complexes via Logstash, écosystème mature et documenté.
Faiblesses : gourmand en ressources (JVM partout), complexe à opérer à l’échelle, coûteux en stockage (tout est indexé). Logstash comme agent est surdimensionné — d’où l’émergence de l’EFK.
EFK : Elasticsearch + Fluentd + Kibana
Apps → Fluentd (collecte/forward) → Elasticsearch (stockage/index) → Kibana (visualisation)
Remplace Logstash par Fluentd : agent plus léger (30-40 Mo vs 4+ Go), natif CNCF, mieux adapté à Kubernetes. Garde les forces d’Elasticsearch pour la recherche. C’est le stack qui a dominé le cloud-native pendant des années.
PLG : Promtail/Alloy + Loki + Grafana
Apps → Alloy (collecte/labels) → Loki (stockage/index labels) → Grafana (visualisation)
Forces : coût de stockage minimal (labels only), léger à opérer, intégration native avec Prometheus et l’écosystème Grafana, idéal pour Kubernetes.
Faiblesses : pas de full-text search, requêtes obligatoirement scopées par labels, haute cardinalité problématique.
Important : utiliser Grafana Alloy, pas Promtail (deprecated février 2025, EOL mars 2026).
Source : CNCF — Logging in Kubernetes: EFK vs PLG Stack]
Stack OTEL : OpenTelemetry Collector + backend au choix
Apps (OTel SDK) → OTel Collector → N'importe quel backend (ES, Loki, ClickHouse, SaaS…)
Forces : indépendance totale vis-à-vis du backend, standard CNCF, unifie logs + métriques + traces, future-proof.
Faiblesses : support des logs plus récent que les autres signaux, configuration parfois verbeuse.
Stack ClickHouse : OTel/Fluent Bit + ClickHouse + Grafana/ClickStack
Apps → OTel Collector/Fluent Bit → ClickHouse → ClickStack UI / Grafana
Forces : compression extrême, requêtes analytiques ultra-rapides, haute cardinalité native, coût/performance optimal à grande échelle.
Faiblesses : écosystème spécifique à l’observabilité encore jeune, UPDATE/DELETE coûteux, complexité opérationnelle en self-managed.
Tableau décisionnel
| Besoin | Stack recommandé |
|---|---|
| Full-text search sur tous les logs | ELK/EFK avec Elasticsearch |
| Logging Kubernetes coût-efficace | PLG (Alloy + Loki + Grafana) |
| Performance de requête maximale à l’échelle | Stack ClickHouse |
| Indépendance vis-à-vis du vendeur | OTel Collector + backend au choix |
| Tout-en-un avec alerting intégré | Graylog |
| Setup minimal, une seule machine | VictoriaLogs + Grafana |
| Collecte edge ultra-légère | Fluent Bit ou Filebeat |
| Transformations complexes de logs | Logstash ou Vector |
| Throughput maximal, ressources minimales | Vector (Rust) ou Fluent Bit (C) |
| Logs + métriques + traces unifiés | OTel + Grafana LGTM ou ClickStack |
[Sources : Better Stack — ELK Stack Alternatives, SigNoz — Top 14 ELK Alternatives 2026]
8. Tendances 2025-2026
OpenTelemetry devient le standard de facto
~50% des entreprises cloud-native l’ont adopté, 85% investissent dedans. La spécification est stable pour les trois signaux. Les logs étaient le dernier signal à se stabiliser — c’est désormais fait. Le projet s’étend maintenant au profiling (CPU/mémoire) et à l’observabilité CI/CD.
La tendance est claire : les nouvelles installations standardisent sur OTel, et les systèmes legacy sont progressivement migrés. [Sources : CNCF — From chaos to clarity, The New Stack — Can OTel Save Observability in 2026?]
L’exode d’Elasticsearch
Les entreprises migrent d’Elasticsearch vers des alternatives moins coûteuses et plus simples à opérer :
- Vers Loki : pour les équipes Kubernetes qui n’ont pas besoin de full-text search. Red Hat fournit officiellement des guides de migration d’Elasticsearch vers Loki pour OpenShift.
- Vers ClickHouse : pour les équipes qui ont besoin de requêtes analytiques rapides. Cloudflare a réduit sa consommation de 8x, Didi a vu 4x d’amélioration de vitesse de requête et 30% de réduction de coûts.
- Vers VictoriaLogs : pour les installations minimales qui veulent quand même du full-text search.
Les raisons : complexité opérationnelle d’Elasticsearch, coût du full-text indexing à l’échelle, et les changements de licence qui ont fragmenté l’écosystème.
La montée de ClickHouse en observabilité
2025 a vu ClickHouse s’imposer comme backend d’observabilité :
- ClickStack : stack open source complète (logs, métriques, traces)
- SigNoz : plateforme d’observabilité OTel-native sur ClickHouse — alternative open source à Datadog
- Uptrace v2.0 : exploitation du nouveau type JSON de ClickHouse
- Qryn/Gigapipe : compatible avec les API Loki/Prometheus/Tempo, stockage ClickHouse
L’insight clé : en 2025, “la haute cardinalité a émergé comme la contrainte plus fondamentale” que le volume seul — et c’est là que ClickHouse excelle. Source : ClickHouse — Observability: A Year in Review]
Le stack LGTM de Grafana
Grafana Labs consolide un écosystème d’observabilité complet :
| Composant | Rôle |
|---|---|
| Loki | Stockage de logs |
| Grafana | Visualisation |
| Tempo | Tracing distribué |
| Mimir | Métriques Prometheus long-terme |
| Pyroscope | Profiling continu |
| Alloy | Collecteur unifié (remplaçant Promtail et Grafana Agent) |
Le Grafana Observability Survey 2025 révèle : 75% utilisent de l’open source pour l’observabilité, 67% utilisent Prometheus en production, le top concern est la complexité, et le plus grand obstacle en incident response est l’alert fatigue.
”Les logs coûtent cher”
Les organisations rapportent une croissance de 250% par an du volume de données de logs. Près de 70% des données d’observabilité collectées sont inutiles. Les stratégies de réduction :
- Sampling : conserver les tendances sans stocker chaque occurrence (réduction de 50% du volume chez un e-commerce leader)
- Filtrage au pipeline : supprimer les logs à faible valeur (health checks réussis, assets statiques) au niveau du collecteur avant qu’ils atteignent le backend
- Structured logging : les requêtes sur des champs indexés sont incomparablement plus efficaces que du regex sur du texte brut
- Stockage en tiers : hot (7 jours), warm (30 jours), cold/delete (90 jours)
- Log-level filtering : ne pas envoyer les niveaux DEBUG/TRACE en production
[Sources : Chronosphere — Reduce log data costs, CNCF — Observability Trends in 2025]
IA/ML dans la gestion des logs
L’adoption de l’analytique de logs basée sur l’IA atteint 63% en entreprise. Les capacités émergentes :
- Détection d’anomalies par LLM : LogLLM utilise BERT pour l’extraction sémantique et Llama pour la classification — +31% de précision de détection, -28% de faux positifs
- Requêtes en langage naturel : “Montre-moi les erreurs critiques de la dernière heure et suggère des causes” au lieu de syntaxes de recherche complexes
- Root cause analysis assistée : au-delà de la surface des logs bruts, analyse contextuelle et identification de la cause racine
- Alerting prédictif : reconnaissance de patterns et modèles prédictifs alertant avant que les problèmes ne deviennent des incidents
[Sources : SigNoz — AI Log Analysis, CNCF — Reimagining log management: The impact of AI and GenAI]
Convergence vers l’agent unique multi-signaux
La tendance claire est la disparition des agents spécialisés (un pour les logs, un pour les métriques, un pour les traces) au profit d’un agent unique :
- Grafana Alloy remplace Promtail + Grafana Agent
- OpenTelemetry Collector gère les trois signaux
- Vector collecte logs et métriques
- Fluent Bit ajoute le support des métriques et traces
Moins d’agents à déployer, configurer et maintenir — et une corrélation native entre les signaux.
9. Bonnes pratiques et anti-patterns
Bonnes pratiques
Structured logging JSON obligatoire — chaque log doit être un objet JSON parsable avec au minimum : timestamp (ISO 8601 UTC), level, service, message. Pour les requêtes HTTP : method, path, status, duration_ms, host. Le Common Log Format (CLF) ne contient pas le header Host — quand on héberge 200+ sites, les logs JSON incluant le hostname sont essentiels pour distinguer les sites. Source : Google Cloud — Structured Logging
Rotation et rétention — configurer systématiquement max-size et max-file sur chaque conteneur (ou globalement dans daemon.json). Préférer le driver local au driver json-file : meilleures performances et rotation intégrée. Définir des politiques de rétention : les access logs perdent leur valeur rapidement (30 jours max), les error logs méritent plus de conservation.
Filtrage à la source — supprimer les logs à faible valeur au niveau du collecteur : health checks réussis, requêtes sur les assets statiques (CSS/JS/images), logs DEBUG/TRACE en production. Les health checks sont bien plus utiles en tant que métriques que comme lignes de log.
Corrélation — injecter des identifiants partagés (request ID, trace ID, container labels) automatiquement via middleware. Sans ça, retrouver le parcours d’une requête à travers des dizaines de conteneurs est impossible.
Données sensibles — ne jamais logger de mots de passe, tokens, PII. Implémenter des représentations logging-safe qui excluent ou masquent les champs sensibles par défaut. Configurer le collecteur pour redacter les patterns connus (Authorization headers, etc.).
Labels à faible cardinalité — pour Loki particulièrement : les labels doivent avoir des valeurs limitées (nom du service, environnement, niveau de log), pas des valeurs uniques (user ID, request ID). Les valeurs uniques vont dans le contenu du log, pas dans les labels.
Anti-patterns courants
| Anti-pattern | Risque | Solution |
|---|---|---|
| Pas de rotation configurée | Le disque se remplit, l’hôte tombe | max-size + max-file sur chaque conteneur |
| Logs non structurés | Parsing impossible à l’échelle | JSON structuré depuis l’application |
docker logs sur 200+ conteneurs | Surcharge du démon Docker | Collecter les logs depuis les fichiers directement |
| Logging driver blocking + driver réseau | L’application bloque si le réseau est lent | Non-blocking avec buffer 5-10 Mo pour les drivers réseau |
| Tout stocker indéfiniment | Coûts de stockage explosifs | Politiques de rétention tiered (hot/warm/cold) |
| Labels haute cardinalité dans Loki | Index explose, performances dégradées | Labels = faible cardinalité, contenu = haute cardinalité |
| Pas de request ID | Corrélation impossible | Middleware d’injection automatique de correlation IDs |
| Logger des données sensibles | Violation de conformité, fuite de données | Masquage/filtrage au niveau application et collecteur |
[Sources : Dash0 — Logging Best Practices, Datadog — Docker Logging Best Practices, Docker Docs — Configure logging drivers]
10. Solutions commerciales et SaaS
Quand la complexité opérationnelle du self-hosted n’est pas justifiable, les solutions SaaS offrent un “zéro maintenance” :
| Solution | Modèle de prix | Force principale |
|---|---|---|
| Datadog | Par host + volume (~$15/host/mois) | Full-stack observability, UX excellente |
| Splunk (Cisco) | Par volume (Go/jour), peut dépasser $1M/an | SIEM/sécurité, SPL très puissant |
| New Relic | Consommation, 100 Go/mois gratuit | Pricing transparent, APM solide |
| Elastic Cloud | Tiers $95-175+/mois, option serverless | Elasticsearch managé, SLA 99.95% |
| AWS CloudWatch | Par Go ingéré + stocké | Intégration AWS native |
| GCP Cloud Logging | Par Go, intégration BigQuery | Détection d’anomalies ML |
| Azure Monitor | Par Go, requêtes KQL | Hybride cloud via agents Arc |
Quand c’est pertinent : quand l’équipe est petite et que le temps passé à opérer Elasticsearch/Loki/ClickHouse serait mieux investi ailleurs. Le coût financier du SaaS se justifie par la réduction du coût opérationnel — mais les factures peuvent monter très vite au-delà de quelques To/jour.
Quand préférer le self-hosted : quand le volume de logs est important (les coûts SaaS deviennent prohibitifs), quand la souveraineté des données est un enjeu, ou quand l’équipe a les compétences ops pour maintenir l’infrastructure.
Source : GraphApp.ai — Datadog vs New Relic vs Splunk
Récapitulatif des licences
| Outil | Licence | Approuvé OSI ? |
|---|---|---|
| Fluentd | Apache 2.0 | Oui |
| Fluent Bit | Apache 2.0 | Oui |
| Vector | MPL 2.0 | Oui |
| Grafana Alloy | Apache 2.0 | Oui |
| OTel Collector | Apache 2.0 | Oui |
| Logstash (core) | Apache 2.0 | Oui |
| Filebeat (core) | Apache 2.0 | Oui |
| Elasticsearch | SSPL / ELv2 / AGPLv3 | AGPLv3 seulement |
| OpenSearch | Apache 2.0 | Oui |
| Grafana Loki | AGPLv3 | Oui |
| ClickHouse | Apache 2.0 | Oui |
| Graylog | SSPL | Non |
| Kibana | SSPL / ELv2 / AGPLv3 | AGPLv3 seulement |
| Grafana | AGPLv3 | Oui |
| Prometheus | Apache 2.0 | Oui |
| VictoriaLogs | Apache 2.0 | Oui |
| Apache Kafka | Apache 2.0 | Oui |
| OpenTelemetry | Apache 2.0 | Oui |
Sources
Documentation officielle
- Docker — Configure logging drivers
- Docker — JSON File logging driver
- Docker — Dual logging
- Docker — docker container logs
- Fluentd — Architecture
- Fluent Bit — Manual
- Elastic — Logstash Reference
- Elastic — Filebeat Reference
- Vector — Official Site
- OpenTelemetry — Collector
- OpenTelemetry — OTLP Specification
- Grafana — Alloy Docs
- Grafana — Loki Docs
- Grafana — Loki Labels Guide
- ClickHouse — Docs
- Apache Kafka — Use Cases
- Graylog — Documentation
- Prometheus — Official Site
- RFC 5424 — The Syslog Protocol
- Google Cloud — Structured Logging
CNCF et écosystème
- CNCF — Fluentd Graduation
- CNCF — OpenTelemetry Project
- CNCF — From chaos to clarity: How OpenTelemetry unified observability
- CNCF — Observability Trends in 2025
- CNCF — Reimagining log management: The impact of AI and GenAI
- CNCF — Logging in Kubernetes: EFK vs PLG Stack
- CNCF — Fluent Bit to Fluentd Migration Guide
Benchmarks et comparatifs
- ClickHouse vs Elasticsearch: The Billion-Row Matchup
- Cloudflare — Log analytics using ClickHouse
- ClickHouse — Didi migrates from Elasticsearch
- VictoriaLogs vs Loki — TrueFoundry
- IBM Cloud — Log Collectors Performance Benchmarking
- Onidel — Fluent Bit vs Vector vs Logstash 2025
- SigNoz — Loki vs Elasticsearch
- Plural — Loki vs ELK for Kubernetes
Licences et controverses
- Elastic — Licensing FAQ
- Elastic — Elastic License v2
- Elastic — AGPLv3 Announcement
- Pureinsights — Elasticsearch vs OpenSearch in 2025
- Graylog — v4.0 SSPL Licensing
Tendances et recommandations
- Grafana Labs — Observability Survey 2025
- Grafana Labs — OpenTelemetry: What’s new in 2025
- ClickHouse — ClickStack announcement
- ClickHouse — Observability: A Year in Review
- The New Stack — Can OpenTelemetry Save Observability in 2026?
- Grafana Community — Promtail EOL March 2026
- Grafana — Agent to Alloy FAQ
- Datadog — Docker Logging Best Practices
- SigNoz — Top 14 ELK Alternatives 2026
- Last9 — How to Reduce Log Data Costs
- Chronosphere — Steps to reduce log data costs
- AWS — Observability vs Monitoring
- IBM — Observability vs Monitoring
- CrowdStrike — Three Pillars of Observability
- CrowdStrike — Docker Logging Guide
- Dash0 — Logging Best Practices
- SigNoz — AI Log Analysis
- ArXiv — LogLLM