fr

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 :

DriverDescription
json-fileJSON local — driver par défaut
localFormat optimisé avec rotation intégrée
noneAucun log
syslogEnvoi vers un démon syslog
journaldEnvoi vers systemd journald
fluentdEnvoi vers Fluentd (forward input)
gelfEnvoi vers un endpoint GELF (Graylog)
awslogsEnvoi vers Amazon CloudWatch
splunkEnvoi vers Splunk via HTTP Event Collector
etwlogsEvent 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 si max-size est 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-file laisse les logs grossir indéfiniment
  • Pas d’agrégation — chaque conteneur est isolé, aucun mécanisme ne centralise les logs
  • Pas de recherchedocker logs supporte 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 compress est activé, docker logs dé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

PilierCe que c’estIdéal pour
LogsEnregistrements horodatés d’événements discrets (texte, JSON, binaire)Debugging, analyse forensique, audit
MétriquesMesures numériques de performance sur le temps (CPU, mémoire, latence, taux d’erreur)Alerting, dashboards, tendances, capacity planning
TracesRepré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é :

CodeSévéritéDescription
0EmergencySystème inutilisable
1AlertAction immédiate requise
2CriticalConditions critiques
3ErrorConditions d’erreur
4WarningConditions d’avertissement
5NoticeNormal mais significatif
6InformationalMessages informatifs
7DebugMessages 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=promtail pour 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

CollecteurLangageRAMThroughputIdéal pourLicence
Fluent BitC~450 KoTrès élevéEdge, IoT, sidecarApache 2.0
VectorRust100-200 MoLe plus élevéPipelines haute perfMPL 2.0
FilebeatGo10-15 MoÉlevéÉcosystème ElasticApache 2.0 / ELv2
Grafana AlloyGo150-300 MoÉlevéÉcosystème Grafana, OTelApache 2.0
OTel CollectorGo150-300 MoÉlevéVendor-neutral, multi-signauxApache 2.0
FluentdC + Ruby200-500 MoMoyenAgrégation, plugins richesApache 2.0
LogstashJRuby/JVM4+ GoMoyenTransformations complexesApache 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é
AspectLokiElasticsearch
IndexationLabels uniquementFull-text (chaque mot)
Taille de l’index1-2% des logsPeut dépasser la taille des données brutes
Coût stockageTrès faible (object storage)Élevé (SSD locaux)
Flexibilité de requêteScopé par labels, puis grepFull-text search sur tout champ
Complexité opérationnelleFaibleÉ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

BackendIndexationRequêtesRessourcesIdéal pourLicence
ElasticsearchFull-textTrès expressivesÉlevées (JVM)Recherche textuelle, complianceSSPL / ELv2 / AGPLv3
OpenSearchFull-textComme ES 7.xÉlevées (JVM)Drop-in replacement ESApache 2.0
LokiLabels seulsLogQL (label-first)FaiblesK8s-native, coût minimalAGPLv3
ClickHouseColonnesSQL analytiqueMoyennesAnalytics, haute cardinalitéApache 2.0
GraylogFull-text (via ES)Elasticsearch syntaxÉlevéesTout-en-un avec alertingSSPL
VictoriaLogsAuto + full-textLogsQLTrès faiblesSetup minimal, self-hostedApache 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

BesoinStack recommandé
Full-text search sur tous les logsELK/EFK avec Elasticsearch
Logging Kubernetes coût-efficacePLG (Alloy + Loki + Grafana)
Performance de requête maximale à l’échelleStack ClickHouse
Indépendance vis-à-vis du vendeurOTel Collector + backend au choix
Tout-en-un avec alerting intégréGraylog
Setup minimal, une seule machineVictoriaLogs + Grafana
Collecte edge ultra-légèreFluent Bit ou Filebeat
Transformations complexes de logsLogstash ou Vector
Throughput maximal, ressources minimalesVector (Rust) ou Fluent Bit (C)
Logs + métriques + traces unifiésOTel + 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 :

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 :

ComposantRôle
LokiStockage de logs
GrafanaVisualisation
TempoTracing distribué
MimirMétriques Prometheus long-terme
PyroscopeProfiling continu
AlloyCollecteur 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 :

  1. Sampling : conserver les tendances sans stocker chaque occurrence (réduction de 50% du volume chez un e-commerce leader)
  2. Filtrage au pipeline : supprimer les logs à faible valeur (health checks réussis, assets statiques) au niveau du collecteur avant qu’ils atteignent le backend
  3. Structured logging : les requêtes sur des champs indexés sont incomparablement plus efficaces que du regex sur du texte brut
  4. Stockage en tiers : hot (7 jours), warm (30 jours), cold/delete (90 jours)
  5. 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-patternRisqueSolution
Pas de rotation configuréeLe disque se remplit, l’hôte tombemax-size + max-file sur chaque conteneur
Logs non structurésParsing impossible à l’échelleJSON structuré depuis l’application
docker logs sur 200+ conteneursSurcharge du démon DockerCollecter les logs depuis les fichiers directement
Logging driver blocking + driver réseauL’application bloque si le réseau est lentNon-blocking avec buffer 5-10 Mo pour les drivers réseau
Tout stocker indéfinimentCoûts de stockage explosifsPolitiques de rétention tiered (hot/warm/cold)
Labels haute cardinalité dans LokiIndex explose, performances dégradéesLabels = faible cardinalité, contenu = haute cardinalité
Pas de request IDCorrélation impossibleMiddleware d’injection automatique de correlation IDs
Logger des données sensiblesViolation de conformité, fuite de donnéesMasquage/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” :

SolutionModèle de prixForce principale
DatadogPar host + volume (~$15/host/mois)Full-stack observability, UX excellente
Splunk (Cisco)Par volume (Go/jour), peut dépasser $1M/anSIEM/sécurité, SPL très puissant
New RelicConsommation, 100 Go/mois gratuitPricing transparent, APM solide
Elastic CloudTiers $95-175+/mois, option serverlessElasticsearch managé, SLA 99.95%
AWS CloudWatchPar Go ingéré + stockéIntégration AWS native
GCP Cloud LoggingPar Go, intégration BigQueryDétection d’anomalies ML
Azure MonitorPar Go, requêtes KQLHybride 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

OutilLicenceApprouvé OSI ?
FluentdApache 2.0Oui
Fluent BitApache 2.0Oui
VectorMPL 2.0Oui
Grafana AlloyApache 2.0Oui
OTel CollectorApache 2.0Oui
Logstash (core)Apache 2.0Oui
Filebeat (core)Apache 2.0Oui
ElasticsearchSSPL / ELv2 / AGPLv3AGPLv3 seulement
OpenSearchApache 2.0Oui
Grafana LokiAGPLv3Oui
ClickHouseApache 2.0Oui
GraylogSSPLNon
KibanaSSPL / ELv2 / AGPLv3AGPLv3 seulement
GrafanaAGPLv3Oui
PrometheusApache 2.0Oui
VictoriaLogsApache 2.0Oui
Apache KafkaApache 2.0Oui
OpenTelemetryApache 2.0Oui

Sources

Documentation officielle

CNCF et écosystème

Benchmarks et comparatifs

Licences et controverses

Tendances et recommandations