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

Fluent Bit : pipeline, configuration et plugins essentiels

Les concepts de Fluent Bit (inputs, parsers, filters, tags et match, buffer, outputs), la configu...

OpenTelemetry Collector : les Processors (transformer, filtrer et protéger la télémétrie)

Maîtriser les processors du Collector OpenTelemetry : batch, memory_limiter, attributes, resource...

Grafana Alloy: Log Management with Loki

Discover how to configure Grafana Alloy to read log files, journald, or network streams, process ...

Logs Datadog avancés : index, filtres d'exclusion, Flex Logs, archives et Sensitive Data Scanner

Maîtriser coût et conformité des logs Datadog : pipelines et processeurs, index et rétention, fil...

Réduire, masquer et router la télémétrie avec Bindplane

Réduire les coûts d'ingestion avec Bindplane : filtres de sévérité, déduplication, échantillonnag...

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

Bonnes pratiques Bindplane

Check-list pour exploiter Bindplane : organisation par labels et fleets, réduction mesurée, masqu...

Grafana Alloy : Collecte et Transformation de Télémétrie

Apprenez à utiliser Grafana Alloy pour collecter, transformer et acheminer logs, métriques et tra...

Logs avancés avec OpenPipeline : traitement, masquage, buckets et rétention

Gérer les logs dans Dynatrace avec OpenPipeline : ingestion, routage, traitement DQL (parsing, en...

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!