This article is available in French.
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.
My progress
Sign in to track your progress and take notes. Sign in
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...