1. Parsers : de la ligne au document #
Donner une structure.
Les parsers #
| Format | Quand l'utiliser | Exemple de ligne |
|---|---|---|
json | Logs déjà structurés (recommandé) | {"level":"info","msg":"ok"} |
logfmt | Paires clé=valeur | level=info msg=ok |
regex | Formats texte (nginx, Apache) | 10.0.0.1 - - [28/Oct/2026…] "GET /" 200 |
ltsv | Champs séparés par tabulations | host:a\tstatus:200 |
parsers:
- name: nginx
format: regex
regex: '^(?<remote>[^ ]*) - (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+) (?<path>[^"]*?) \S+" (?<code>\d+) (?<size>\d+)'
time_key: time
time_format: '%d/%b/%Y:%H:%M:%S %z'
types: code:integer size:integerOù déclarer : Un parser se déclare dans un fichier de parsers (parsers_file) et s'applique dans l'input (parser) ou avec le filtreparser.
2. Les filtres essentiels #
Enrichir, filtrer, modifier.
Tableau #
| Filtre | Rôle |
|---|---|
kubernetes | Ajoute pod, namespace, conteneur, labels et annotations (fusionne le JSON du message avec merge_log) |
parser | Applique un parser à un champ (ex. log) |
grep | Garde (regex) ou exclut (exclude) selon un champ |
modify | Ajoute, renomme, supprime des champs, avec conditions |
nest | Imbrique ou aplatit des champs (lift / nest) |
record_modifier | Ajoute des champs fixes, ne garde qu'une liste de clés |
rewrite_tag | Ré-étiquette un enregistrement pour le router ailleurs |
throttle | Limite le débit (protection contre les tempêtes de logs) |
lua | Logique sur mesure en Lua quand rien d'autre ne convient |
3. Exemple complet #
Logs Kubernetes propres.
Configuration #
pipeline:
filters:
- name: kubernetes
match: kube.*
merge_log: on # le JSON de l'application devient des champs
keep_log: off
labels: on
annotations: off
- name: grep
match: kube.*
exclude: path ^/(healthz|metrics)$
- name: modify
match: kube.*
add: cluster prod-paris
rename: msg message
remove: password
- name: rewrite_tag
match: kube.*
rule: $level ^(error|fatal)$ alertes.$TAG false # copie les erreurs sous un nouveau tag
- name: throttle
match: kube.*
rate: 5000
window: 5
interval: 1sProcessors #
Depuis Fluent Bit 3, des processors s'attachent directement à un input ou un output en YAML (y compris pour les métriques et les traces) : le traitement se fait au plus près de la source, sans repasser par le routage.
pipeline:
inputs:
- name: tail
path: /var/log/app.log
processors:
logs:
- name: content_modifier
action: insert
key: environnement
value: productionBonne Pratique : Testez chaque filtre en sortie stdout avec un jeu de lignes réelles avant de l'activer en production.