TL;DR — Résumé Rapide
Vector est un pipeline d'observabilité Rust de Datadog. Collectez logs, métriques et traces depuis n'importe quelle source et routez-les avec VRL.
Vector est un pipeline de données d’observabilité haute performance écrit en Rust, maintenu par Datadog. Il collecte les logs, métriques et traces depuis n’importe quelle source, les transforme avec VRL (Vector Remap Language), et les route vers n’importe quelle destination, le tout dans un unique binaire lié statiquement qui utilise une fraction de la mémoire consommée par Logstash ou Fluentd. Ce guide couvre l’ensemble du stack Vector : architecture, installation, configuration, transformations VRL, modèles de déploiement, garanties de livraison et un pipeline de production qui collecte les logs Nginx et les route vers Loki et ClickHouse.
Prérequis
- Serveur Linux (Ubuntu 22.04+, Debian 12+, RHEL 9+) ou macOS pour les tests locaux.
- Docker ou cluster Kubernetes (optionnel, pour les déploiements conteneurisés).
- Familiarité de base avec la configuration YAML.
- Destinations en cours d’exécution et accessibles (Loki, Elasticsearch, ClickHouse, S3, etc.).
Architecture de Vector
Vector traite les données d’observabilité comme un graphe acyclique dirigé (DAG) de sources → transformations → destinations.
- Sources — ingèrent des données depuis des fichiers, journals, sockets, HTTP, Kafka, APIs cloud.
- Transformations — analysent, enrichissent, filtrent, routent, agrègent ou dédupliquent les événements.
- Destinations — livrent les données aux systèmes de stockage, recherche, métriques et alertes.
Vector atteint ses performances grâce à plusieurs choix de conception natifs Rust :
- Analyse sans copie — les lignes de log sont analysées sur place sans allocations heap supplémentaires.
- Concurrence adaptative — Vector ajuste automatiquement le nombre de requêtes en vol vers chaque destination via un algorithme AIMD, évitant la surcharge sans configuration manuelle.
- Accusés de réception de bout en bout — une ligne de log n’est pas supprimée de sa source tant que toutes les destinations configurées n’ont pas confirmé la réception.
- Tampons disque — les événements débordent sur disque quand la file mémoire est pleine, survivant aux redémarrages.
Installation
apt (Debian/Ubuntu)
curl -1sLf 'https://repositories.timber.io/public/vector/cfg/setup/bash.deb.sh' \
| sudo -E bash
sudo apt install -y vector
sudo systemctl enable --now vector
yum/dnf (RHEL/Fedora/Rocky)
curl -1sLf 'https://repositories.timber.io/public/vector/cfg/setup/bash.rpm.sh' \
| sudo -E bash
sudo yum install -y vector
sudo systemctl enable --now vector
Docker
docker run -d \
--name vector \
-v /var/log:/var/log:ro \
-v $(pwd)/vector.yaml:/etc/vector/vector.yaml:ro \
timberio/vector:latest-alpine
Kubernetes DaemonSet via Helm
helm repo add vector https://helm.vector.dev
helm repo update
helm install vector vector/vector \
--namespace vector \
--create-namespace \
--values vector-values.yaml
Homebrew (macOS)
brew tap vectordotdev/brew
brew install vector
Configuration
Vector lit vector.yaml (ou vector.toml, vector.json) depuis /etc/vector/ par défaut :
data_dir: /var/lib/vector
sources:
ma_source:
type: file
include: ["/var/log/nginx/*.log"]
transforms:
ma_transformation:
type: remap
inputs: ["ma_source"]
source: |
. = parse_json!(string!(.message))
sinks:
ma_destination:
type: loki
inputs: ["ma_transformation"]
endpoint: "http://loki:3100"
labels:
job: nginx
Chaque composant possède une clé de chaîne unique. inputs connecte les composants entre eux.
Référence des Sources
| Source | Clé type | Description |
|---|---|---|
| Suivi de fichiers | file | Suit les fichiers de log avec des patterns glob |
| Journal systemd | journald | Lit depuis journald avec filtres d’unité |
| Conteneurs Docker | docker_logs | Collecte depuis le socket du daemon Docker |
| Pods Kubernetes | kubernetes_logs | Collecte native k8s avec métadonnées de pod |
| Syslog UDP/TCP | syslog | Reçoit les messages syslog RFC 3164 / RFC 5424 |
| Serveur HTTP | http_server | Expose un endpoint HTTP pour recevoir des logs |
| Kafka | kafka | Consomme depuis un ou plusieurs topics Kafka |
| Métriques hôte | host_metrics | Collecte CPU, mémoire, disque, réseau |
| Métriques internes | internal_metrics | Compteurs de débit et d’erreur propres à Vector |
VRL — Vector Remap Language
VRL est le langage de transformation au cœur de Vector. C’est un langage d’expressions à typage statique conçu pour être rapide, sûr et lisible. Chaque programme VRL reçoit un événement sous forme de . (point) et doit retourner l’événement muté.
Analyser du JSON
transforms:
analyser_json:
type: remap
inputs: ["nginx_access"]
source: |
. = parse_json!(string!(.message))
Le suffixe ! sur un appel de fonction signifie “abandonner l’événement si cela échoue.” Les événements échoués sont routés vers la sortie dropped du composant.
Analyser Syslog
transforms:
analyser_syslog:
type: remap
inputs: ["syslog_entree"]
source: |
parsed = parse_syslog!(.message)
.severity = parsed.severity
.facility = parsed.facility
.appname = parsed.appname
.message = parsed.message
Logique Conditionnelle et Expurgation des PII
source: |
if .status_code >= 500 {
.severity = "error"
} else if .status_code >= 400 {
.severity = "warn"
} else {
.severity = "info"
}
.message = redact(.message, filters: [
{ type: "pattern", pattern: r'\b(?:\d[ -]*?){13,16}\b' }
])
del(.trace_id_interne)
Analyse Regex pour Nginx
transforms:
analyser_nginx:
type: remap
inputs: ["nginx_access"]
source: |
parsed, err = parse_regex(.message, r'^(?P<remote_addr>\S+) - (?P<user>\S+) \[(?P<time>[^\]]+)\] "(?P<method>\S+) (?P<path>\S+) (?P<protocol>[^"]+)" (?P<status>\d+) (?P<bytes>\d+)')
if err == null {
. = merge(., parsed)
.status = to_int!(.status)
.bytes = to_int!(.bytes)
del(.message)
}
Référence des Transformations
| Transformation | Objectif |
|---|---|
remap | Transformation VRL complète — analyser, enrichir, filtrer, muter |
filter | Supprimer les événements ne correspondant pas à une condition VRL |
route | Diviser le flux en voies nommées par condition |
aggregate | Combiner plusieurs événements en un (groupement, fenêtres temporelles) |
dedupe | Supprimer les événements dupliqués dans une fenêtre temporelle |
sample | Conserver un pourcentage configurable d’événements |
log_to_metric | Dériver des compteurs/jauges depuis des champs de log |
Référence des Destinations
| Destination | Clé type | Cas d’usage |
|---|---|---|
| Loki | loki | Stockage de logs Grafana |
| Elasticsearch / OpenSearch | elasticsearch | Recherche plein texte et analytique |
| ClickHouse | clickhouse | Stockage analytique de logs haut volume |
| S3 / R2 | aws_s3 | Archivage longue durée |
| Kafka | kafka | Republication vers des consommateurs aval |
| Prometheus Exporter | prometheus_exporter | Expose les métriques sur /metrics |
| Datadog Logs | datadog_logs | Envoie vers l’ingestion Datadog |
| Splunk HEC | splunk_hec_logs | Envoie vers le Splunk HTTP Event Collector |
Tampons et Garanties de Livraison
Pour la production, activez les tampons disque et les accusés de réception :
sinks:
clickhouse_destination:
type: clickhouse
inputs: ["analyser_nginx"]
endpoint: "http://clickhouse:8123"
database: logs
table: nginx_access
buffer:
type: disk
max_size: 268435456
when_full: block
acknowledgements:
enabled: true
Avec acknowledgements.enabled: true, Vector attend la confirmation de la destination avant d’avancer la position de lecture dans la source, garantissant une livraison durable au moins une fois.
Tests Unitaires des Transformations
tests:
- name: "analyser_nginx traite correctement une requête 200"
inputs:
- insert_at: analyser_nginx
type: log
log_fields:
message: '127.0.0.1 - - [23/Mar/2026:10:00:00 +0000] "GET /api/health HTTP/1.1" 200 42'
outputs:
- extract_from: analyser_nginx
conditions:
- type: vrl
source: |
assert_eq!(.status, 200)
assert_eq!(.method, "GET")
vector test /etc/vector/vector.yaml
Surveillance de Vector
# Débit par composant en temps réel
vector top
# Valider la configuration sans démarrer
vector validate /etc/vector/vector.yaml
Exposer les métriques internes de Vector à Prometheus :
sources:
metriques_internes:
type: internal_metrics
scrape_interval_secs: 15
sinks:
prometheus:
type: prometheus_exporter
inputs: ["metriques_internes"]
address: "0.0.0.0:9598"
Vector vs Alternatives
| Fonctionnalité | Vector | Fluentd | Fluent Bit | Logstash | Filebeat | Promtail | Grafana Alloy |
|---|---|---|---|---|---|---|---|
| Langage | Rust | Ruby | C | JVM | Go | Go | Go |
| Mémoire | ~20 Mo | ~200 Mo | ~1 Mo | ~512 Mo | ~50 Mo | ~30 Mo | ~60 Mo |
| Débit | Très élevé | Moyen | Élevé | Moyen | Élevé | Moyen | Élevé |
| Transformations | VRL | DSL Fluentd | Lua | Ruby/Grok | Minimal | Stages | DSL Alloy |
| Pipeline métriques | Oui | Plugin | Limité | Plugin | Non | Non | Oui |
| Tampons disque | Natif | Plugin | Oui | Natif | Natif | Non | Oui |
| Tests unitaires | Intégrés | Non | Non | Non | Non | Non | Limité |
| Kubernetes natif | Oui | Oui | Oui | Non | Oui | Oui | Oui |
Cas Limites et Pièges Courants
- VRL
!vs?—parse_json!abandonne l’événement en cas d’erreur ;parse_json?retournenull. Choisissez intentionnellement. - Suivi de position des fichiers — Vector stocke les offsets dans
data_dir. Supprimer ce répertoire provoque une ré-ingestion des fichiers existants. - Cardinalité des labels dans Loki — évitez d’utiliser des champs à haute cardinalité (IDs utilisateur) comme labels Loki.
- Types de données dans ClickHouse — prédéfinissez le schéma de la table et définissez
skip_unknown_fields: truepour éviter les erreurs d’ingestion.
Résumé
- Vector est un pipeline d’observabilité basé sur Rust avec un modèle DAG sources → transformations → destinations.
- VRL gère toute l’analyse, l’enrichissement, le filtrage et le routage dans un langage sûr et testable.
- Modes de déploiement : agent (par hôte), agrégateur (centralisé), sidecar (pod Kubernetes).
- Tampons disque + accusés de réception fournissent une livraison durable au moins une fois sans perte de données en cas de panne.
- Tests unitaires dans
vector.yamlvalident les transformations avant le déploiement en production. - Vector gère logs et métriques dans un seul pipeline, remplaçant Fluentd, Logstash, Filebeat et Promtail simultanément.