RousselTMLEARNING

Observabilité

Vector : les transforms en détail (remap et VRL, route, filter, réduction et métriques)

Transformer les événements dans Vector : remap et le langage VRL (analyse, enrichissement, gestion des erreurs), route, filter, sample, dedupe, reduce, throttle, log_to_metric, aggregate, et tests unitaires des transformations.

1. remap et VRL #

Le cœur de Vector.

Principe #

Topologie Vector
Les transforms se chaînent : chacune déclare ses inputs.

remap exécute un programme VRL (Vector Remap Language) sur chaque événement. VRL est typé et vérifié à la compilation : une fonction qui peut échouer (parse_json) doit être gérée explicitement, sinon la configuration est refusée.

transforms:
  nettoyer:
    type: remap
    inputs: [kube]
    drop_on_error: true
    reroute_dropped: true            # les erreurs partent vers nettoyer.dropped
    source: |
      . = merge(., parse_json(.message) ?? {})            # ?? : valeur de repli si l'analyse échoue
      .level = downcase(string(.level) ?? "info")
      .status = to_int(.status) ?? null
      .timestamp = parse_timestamp(.time, "%+") ?? now()
      .email = redact(.email, filters: [r'[^@]+@'])        # masquage RGPD
      del(.password)
      if .path == "/healthz" { abort }                     # supprimer l'événement

Gestion des erreurs #

ÉcritureComportement
parse_json!(.message)Interrompt l'événement en cas d'erreur (erreur à l'exécution)
parse_json(.message) ?? {}Valeur de repli
x, err = parse_json(.message)Récupère l'erreur pour la traiter
abortAbandonne l'événement (ou le réachemine avec reroute_dropped)

2. Router, filtrer, réduire #

Maîtriser le volume.

Les transforms de flux #

Topologie de transformations
Chaque branche de route est une sortie nommée (route.erreurs).
TransformRôle
routeSorties nommées selon des conditions VRL
filterGarder les événements qui respectent une condition
sampleNe garder qu'une fraction (avec exclusion des erreurs)
dedupeSupprimer les doublons sur des champs
reduceFusionner plusieurs événements (multiligne, transactions)
throttleLimiter le débit par clé
log_to_metricCompteurs et histogrammes dérivés des logs
aggregateAgréger des métriques sur un intervalle
  aiguiller:
    type: route
    inputs: [nettoyer]
    route:
      erreurs: '.level == "error"'
      lent: 'to_int(.duration_ms) ?? 0 > 1000'
  echantillon:
    type: sample
    inputs: [aiguiller._unmatched]
    rate: 10                          # 1 événement sur 10
    exclude: '.status >= 500'
  compteur_erreurs:
    type: log_to_metric
    inputs: [aiguiller.erreurs]
    metrics:
      - type: counter
        field: level
        name: erreurs_total
        tags: { service: "{{ service }}" }

3. Tester les transformations #

Des tests unitaires dans la configuration.

Tests #

tests:
  - name: une ligne JSON est analysée et le mot de passe supprimé
    inputs:
      - insert_at: nettoyer
        type: log
        log_fields:
          message: '{"level":"ERROR","status":"503","password":"x"}'
    outputs:
      - extract_from: nettoyer
        conditions:
          - type: vrl
            source: |
              assert_eq!(.level, "error")
              assert_eq!(.status, 503)
              assert!(!exists(.password))
vector test /etc/vector/vector.yaml
vector vrl          # console interactive pour mettre au point un programme VRL
Bonne Pratique : Intégrez vector validate et vector test à la CI : une erreur de VRL est détectée avant d'atteindre la production.

Articles liés

Vector : les sources en détail

Les sources de Vector : fichiers, logs Kubernetes, journald, syslog, sockets, HTTP, OpenTelemetry, Kafka, sou…

Vector : les sinks en détail (destinations, lots, tampons et réessais)

Envoyer les événements de Vector : sinks Loki, Elasticsearch, S3, Kafka, OpenTelemetry, Prometheus, Datadog, …

Vector : sources, transforms, sinks et topologie

Les concepts de Vector (sources, transforms, sinks), la configuration YAML, les composants courants, les tamp…

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 !