RousselTMLEARNING

Article · Vector: from discovery to expertise

Transforms in detail

This article is available in French.

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.

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

My progress

  • ⏱ Estimated time : ≈ 9 min

Sign in to track your progress and take notes. Sign in

💬 Ask a question

Recommended Articles

Transformer avec VRL et tester ses pipelines Vector

Le langage VRL (Vector Remap Language) : analyse de logs (JSON, regex, syslog), gestion des erreu...

Vector : sources, transforms, sinks et topologie

Les concepts de Vector (sources, transforms, sinks), la configuration YAML, les composants couran...

Vector : les sources en détail

Les sources de Vector : fichiers, logs Kubernetes, journald, syslog, sockets, HTTP, OpenTelemetry...

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

Envoyer les événements de Vector : sinks Loki, Elasticsearch, S3, Kafka, OpenTelemetry, Prometheu...

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, rota...

Bonnes pratiques de collecte de logs avec Fluent Bit et Vector

Check-list de production pour la collecte de logs : structure, filtrage à la source, masquage, ta...

Fluent Bit ou Vector ? Choisir, combiner et migrer

Comparer Fluent Bit et Vector (performances, transformations, écosystème, gouvernance), les combi...

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 colle...

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

Structurer et transformer les logs dans Fluent Bit : parsers (json, regex, logfmt, ltsv), parsers...

Support us

♥ SUPPORT US

Support RousselTM Learning

Courses, articles, labs and certificates stay free with no intrusive ads. A voluntary contribution, of any amount you choose, pays for hosting, lab environments and new content.

Contribute with PayPal Any amount · card or PayPal accountLearn more
QR code PayPal
Or scan this QR code with your phone

Thank you, every contribution counts!