RousselTMLEARNING

Observabilité

Fluent Bit : parsers et filters, structurer et transformer les logs

Structurer et transformer les logs dans Fluent Bit : parsers (json, regex, logfmt, ltsv), parsers multilignes, filtre kubernetes, grep, modify, nest, record_modifier, rewrite_tag, throttle, lua et processors, avec leur ordre d'exécution.

1. Parsers : de la ligne au document #

Donner une structure.

Les parsers #

Pipeline Fluent Bit
Le parser transforme une ligne de texte en champs exploitables.
FormatQuand l'utiliserExemple de ligne
jsonLogs déjà structurés (recommandé){"level":"info","msg":"ok"}
logfmtPaires clé=valeurlevel=info msg=ok
regexFormats texte (nginx, Apache)10.0.0.1 - - [28/Oct/2026…] "GET /" 200
ltsvChamps séparés par tabulationshost: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:integer
Où déclarer : Un parser se déclare dans un fichier de parsers (parsers_file) et s'applique dans l'input (parser) ou avec le filtre parser.

2. Les filtres essentiels #

Enrichir, filtrer, modifier.

Tableau #

Chaîne de filtres
L'ordre de déclaration est l'ordre d'exécution : enrichir avant de filtrer sur les métadonnées.
FiltreRôle
kubernetesAjoute pod, namespace, conteneur, labels et annotations (fusionne le JSON du message avec merge_log)
parserApplique un parser à un champ (ex. log)
grepGarde (regex) ou exclut (exclude) selon un champ
modifyAjoute, renomme, supprime des champs, avec conditions
nestImbrique ou aplatit des champs (lift / nest)
record_modifierAjoute des champs fixes, ne garde qu'une liste de clés
rewrite_tagRé-étiquette un enregistrement pour le router ailleurs
throttleLimite le débit (protection contre les tempêtes de logs)
luaLogique 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: 1s

Processors #

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: production
Bonne Pratique : Testez chaque filtre en sortie stdout avec un jeu de lignes réelles avant de l'activer en production.

Articles liés

Fluent Bit : les inputs (entrées) du pipeline en détail

Tout sur les inputs de Fluent Bit : rôle des tags, lecture de fichiers avec tail (positions, rotation, multil…

Fluent Bit : les outputs (sorties), routage et fiabilité de l'envoi

Envoyer les données de Fluent Bit : routage par Match et Match_Regex, sorties Loki, Elasticsearch/OpenSearch,…

Collecteurs de logs légers : Fluent Bit, Vector et les autres

Pourquoi un collecteur de logs, ce qui distingue les agents légers (Fluent Bit, Vector) des collecteurs histo…

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !