Aller au contenu
Outils medium

Fluentd : Agrégation de logs unifiée

11 min de lecture

Fluentd est un collecteur de données open source unifié, projet CNCF Graduated, qui centralise et route les logs vers de multiples destinations. Là où Fluent Bit collecte en périphérie, Fluentd joue le rôle d'agrégateur central, avec un écosystème de plus de 500 plugins.

Ce guide s'adresse aux profils intermédiaires et avancés. Vous allez installer Fluentd (version 1.19), comprendre son pipeline (source, filter, match), écrire une configuration, gérer le buffering et router les logs par tags.

  • Comprendre le pipeline Fluentd : source, filter, match (buffer).
  • Installer Fluentd proprement (Docker épinglé, gem, fluent-package).
  • Configurer collecte, filtres et sorties multiples.
  • Router les événements avec le système de tags.
  • Fiabiliser avec un buffer fichier persistant.

Fluentd est le standard de facto pour l'agrégation de logs dans les environnements cloud-native, avec plus de 500 plugins disponibles.

CaractéristiqueDescription
LicenceApache 2.0
MaturitéCNCF Graduated
LangageRuby + C
Plugins500+
CommunautéTrès active

Fluentd utilise une architecture en pipeline avec des plugins d'entrée, de filtrage et de sortie.

┌─────────────────────────────────────────────────────────────────┐
│ Fluentd │
│ ┌──────────────┐ ┌───────────────┐ ┌───────────────────────┐ │
│ │ Input │──│ Filter │──│ Output │ │
│ │ plugins │ │ plugins │ │ plugins │ │
│ └──────────────┘ └───────────────┘ └───────────────────────┘ │
│ │
│ - tail - parser - elasticsearch │
│ - forward - record_modifier - loki │
│ - http - grep - kafka │
│ - syslog - geoip - s3 │
│ - tcp - throttle - forward │
└─────────────────────────────────────────────────────────────────┘
┌───────────────┐
│ Buffer │
│ (file/memory) │
└───────────────┘

Le paquet historique td-agent est en fin de vie. Son successeur est fluent-package (Fluentd v5), à installer depuis le dépôt signé officiel pour un service système. Pour une installation simple et multiplateforme, Fluentd s'installe aussi comme gem Ruby :

Fenêtre de terminal
# Fluentd via RubyGems (nécessite Ruby)
gem install fluentd
fluentd --version

La configuration Fluentd utilise des directives <source>, <filter> et <match>.

fluent.conf
<source>
@type tail
path /var/log/app/*.log
pos_file /var/log/fluentd/app.log.pos
tag app.logs
<parse>
@type json
</parse>
</source>
<match app.logs>
@type stdout
</match>
fluent.conf
# Collecter les logs applicatifs
<source>
@type tail
path /var/log/app/*.log
pos_file /var/log/fluentd/app.pos
tag app.logs
<parse>
@type json
time_key timestamp
time_format %Y-%m-%dT%H:%M:%S.%L%z
</parse>
</source>
# Collecter syslog
<source>
@type syslog
port 5140
bind 0.0.0.0
tag syslog
</source>
# Ajouter des métadonnées
<filter app.**>
@type record_transformer
<record>
hostname "#{Socket.gethostname}"
environment production
</record>
</filter>
# Parser les logs multi-format
<filter app.**>
@type parser
key_name message
reserve_data true
<parse>
@type multi_format
<pattern>
format json
</pattern>
<pattern>
format regexp
expression /^(?<time>[^ ]+) (?<level>[^ ]+) (?<message>.*)$/
</pattern>
</parse>
</filter>
# Sortie vers Elasticsearch avec buffer
<match **>
@type elasticsearch
host elasticsearch
port 9200
index_name fluentd-${tag}-%Y.%m.%d
<buffer tag, time>
@type file
path /var/log/fluentd/buffer
flush_mode interval
flush_interval 5s
chunk_limit_size 5MB
queue_limit_length 512
retry_max_interval 30
retry_forever true
</buffer>
</match>
PluginUsageConfiguration
tailLire des fichierspath, pos_file
forwardRecevoir d'autres Fluentdport 24224
httpAPI HTTPport 9880
syslogRecevoir syslogport 5140
tcpSocket TCPport 5170
PluginUsageExemple
record_transformerAjouter/modifier des champsAjouter hostname
parserParser le messageJSON, regex
grepFiltrer par patternInclude/exclude
geoipEnrichir avec GeoIPIP → localisation
PluginDestination
elasticsearchElasticsearch / OpenSearch
lokiGrafana Loki
kafkaApache Kafka
s3Amazon S3
forwardAutre Fluentd
prometheusMétriques Prometheus
Fenêtre de terminal
# Via gem
fluent-gem install fluent-plugin-elasticsearch
# Dans Docker
FROM fluent/fluentd:v1.19-debian-1
RUN gem install fluent-plugin-elasticsearch

Le buffer est crucial pour la fiabilité. Fluentd supporte deux types.

Rapide mais perte de données en cas de crash.

<buffer>
@type memory
flush_interval 5s
</buffer>

Persistant sur disque, survit aux redémarrages.

<buffer>
@type file
path /var/log/fluentd/buffer
chunk_limit_size 8MB
total_limit_size 2GB
flush_mode interval
flush_interval 5s
flush_thread_count 2
retry_forever true
retry_max_interval 30
</buffer>

Les tags déterminent le routage des événements.

# Source avec tag
<source>
@type tail
path /var/log/nginx/access.log
tag nginx.access
</source>
# Match exact
<match nginx.access>
@type elasticsearch
</match>
# Match avec wildcard
<match nginx.**>
@type loki
</match>
# Match multiple tags
<match {nginx.access,app.logs}>
@type s3
</match>
# Match tout
<match **>
@type stdout
</match>
┌─────────────────────────────────────────────────────────────────┐
│ Kubernetes Cluster │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Fluent │ │ Fluent │ │ Fluent │ ← DaemonSet │
│ │ Bit │ │ Bit │ │ Bit │ (chaque node) │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └─────────────┼─────────────┘ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Fluentd │ ← Deployment │
│ │ (agrégateur) │ (replicas: 2) │
│ └────────┬────────┘ │
│ │ │
└────────────────────┼──────────────────────────────────────────────┘
┌──────────────────────┐
│ Elasticsearch / │
│ Loki / S3 │
└──────────────────────┘
values-forwarder.yaml
config:
inputs: |
[INPUT]
Name tail
Path /var/log/containers/*.log
Tag kube.*
outputs: |
[OUTPUT]
Name forward
Match *
Host fluentd-aggregator
Port 24224
fluentd-aggregator.conf
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<filter kube.**>
@type kubernetes_metadata
</filter>
<match kube.**>
@type elasticsearch
host elasticsearch
port 9200
index_name kubernetes-%Y.%m.%d
<buffer>
@type file
path /var/log/fluentd/buffer
</buffer>
</match>

Activez le plugin monitor_agent :

<source>
@type monitor_agent
bind 0.0.0.0
port 24220
</source>

Accédez à http://localhost:24220/api/plugins.json.

<source>
@type prometheus
bind 0.0.0.0
port 24231
metrics_path /metrics
</source>
<source>
@type prometheus_output_monitor
</source>
  1. Utilisez des buffers fichier en production
  2. Limitez la taille des chunks pour éviter l'OOM
  3. Activez retry_forever pour ne pas perdre de logs
  4. Séparez collecte et agrégation (Fluent Bit + Fluentd)
  5. Monitorez les buffers pour détecter les backlogs
SymptômeCause probableSolution
Buffer pleinDestination lente/downAugmenter queue_limit
Logs perdusMemory buffer + crashPasser en file buffer
Haute mémoireChunks trop grosRéduire chunk_limit_size
Parsing échoueFormat non reconnuVérifier le pattern
Fenêtre de terminal
# Vérifier la config
fluentd --dry-run -c /etc/fluent/fluent.conf
# Mode debug
fluentd -c /etc/fluent/fluent.conf -vvv
  • CNCF Graduated : standard de l'industrie
  • 500+ plugins : intégration avec tout
  • Buffer fichier : obligatoire en production
  • Tags : système de routage flexible
  • Fluent Bit en collecte : Fluentd en agrégation

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn