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

SourceClé typeDescription
Suivi de fichiersfileSuit les fichiers de log avec des patterns glob
Journal systemdjournaldLit depuis journald avec filtres d’unité
Conteneurs Dockerdocker_logsCollecte depuis le socket du daemon Docker
Pods Kuberneteskubernetes_logsCollecte native k8s avec métadonnées de pod
Syslog UDP/TCPsyslogReçoit les messages syslog RFC 3164 / RFC 5424
Serveur HTTPhttp_serverExpose un endpoint HTTP pour recevoir des logs
KafkakafkaConsomme depuis un ou plusieurs topics Kafka
Métriques hôtehost_metricsCollecte CPU, mémoire, disque, réseau
Métriques internesinternal_metricsCompteurs 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

TransformationObjectif
remapTransformation VRL complète — analyser, enrichir, filtrer, muter
filterSupprimer les événements ne correspondant pas à une condition VRL
routeDiviser le flux en voies nommées par condition
aggregateCombiner plusieurs événements en un (groupement, fenêtres temporelles)
dedupeSupprimer les événements dupliqués dans une fenêtre temporelle
sampleConserver un pourcentage configurable d’événements
log_to_metricDériver des compteurs/jauges depuis des champs de log

Référence des Destinations

DestinationClé typeCas d’usage
LokilokiStockage de logs Grafana
Elasticsearch / OpenSearchelasticsearchRecherche plein texte et analytique
ClickHouseclickhouseStockage analytique de logs haut volume
S3 / R2aws_s3Archivage longue durée
KafkakafkaRepublication vers des consommateurs aval
Prometheus Exporterprometheus_exporterExpose les métriques sur /metrics
Datadog Logsdatadog_logsEnvoie vers l’ingestion Datadog
Splunk HECsplunk_hec_logsEnvoie 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éVectorFluentdFluent BitLogstashFilebeatPromtailGrafana Alloy
LangageRustRubyCJVMGoGoGo
Mémoire~20 Mo~200 Mo~1 Mo~512 Mo~50 Mo~30 Mo~60 Mo
DébitTrès élevéMoyenÉlevéMoyenÉlevéMoyenÉlevé
TransformationsVRLDSL FluentdLuaRuby/GrokMinimalStagesDSL Alloy
Pipeline métriquesOuiPluginLimitéPluginNonNonOui
Tampons disqueNatifPluginOuiNatifNatifNonOui
Tests unitairesIntégrésNonNonNonNonNonLimité
Kubernetes natifOuiOuiOuiNonOuiOuiOui

Cas Limites et Pièges Courants

  • VRL ! vs ?parse_json! abandonne l’événement en cas d’erreur ; parse_json? retourne null. 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: true pour é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.yaml valident 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.

Articles Connexes