1. remap et VRL #
Le cœur de Vector.
Principe #
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énementGestion des erreurs #
| Écriture | Comportement |
|---|---|
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 |
abort | Abandonne l'événement (ou le réachemine avec reroute_dropped) |
2. Router, filtrer, réduire #
Maîtriser le volume.
Les transforms de flux #
| Transform | Rôle |
|---|---|
route | Sorties nommées selon des conditions VRL |
filter | Garder les événements qui respectent une condition |
sample | Ne garder qu'une fraction (avec exclusion des erreurs) |
dedupe | Supprimer les doublons sur des champs |
reduce | Fusionner plusieurs événements (multiligne, transactions) |
throttle | Limiter le débit par clé |
log_to_metric | Compteurs et histogrammes dérivés des logs |
aggregate | Agré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 VRLBonne Pratique : Intégrezvector validateetvector testà la CI : une erreur de VRL est détectée avant d'atteindre la production.
