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.
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
Articles recommandés
Vector : sources, transforms, sinks et topologie
Les concepts de Vector (sources, transforms, sinks), la configuration YAML, les composants couran...
Transformer avec VRL et tester ses pipelines Vector
Le langage VRL (Vector Remap Language) : analyse de logs (JSON, regex, syslog), gestion des erreu...
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...