Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Vector — wydajny pipeline do agregacji logów na VPS

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS

Logstash pożera GB RAMu, Fluentd jest wolny pod obciążeniem — Vector to alternatywa napisana w Rust, która przetwarza miliony zdarzeń na sekundę przy minimalnym zużyciu zasobów. Jeden agent zbiera logi, metryki i traces, transformuje je przez VRL i rozsyła do wielu sinków. Oto kompletny przewodnik.

Instalacja Vector

# Ubuntu/Debian — oficjalny pakiet
curl -1sLf 'https://repositories.timber.io/public/vector/cfg/setup/bash.deb.sh' | bash
apt install vector

# Weryfikacja
vector --version
systemctl status vector

# Konfiguracja domyślna
cat /etc/vector/vector.toml

Podstawowa konfiguracja — TOML

Plik /etc/vector/vector.toml. Każdy komponent ma typ (type) i opcjonalne inputs wskazujące na poprzednie komponenty:

# /etc/vector/vector.toml

# 1. SOURCE — czytaj logi Nginx
[sources.nginx_logs]
type = "file"
include = ["/var/log/nginx/access.log", "/var/log/nginx/error.log"]
read_from = "end"
multiline.condition_pattern = '^[0-9]'
multiline.mode = "halt_before"
multiline.start_pattern = '^[0-9]'
multiline.timeout_ms = 1000

# 2. TRANSFORM — parsuj format access.log
[transforms.parse_nginx]
type = "remap"
inputs = ["nginx_logs"]
source = '''
  # Parsuj Combined Log Format
  . = parse_common_log!(.message)
  .host = get_hostname!()
  .service = "nginx"
'''

# 3. TRANSFORM — filtruj healthchecks
[transforms.filter_health]
type = "filter"
inputs = ["parse_nginx"]
condition = '.request != "GET /health HTTP/1.1"'

# 4. SINK — wyślij do Loki
[sinks.loki_out]
type = "loki"
inputs = ["filter_health"]
endpoint = "http://loki:3100"
encoding.codec = "json"

[sinks.loki_out.labels]
host = "{{ host }}"
service = "{{ service }}"
level = "{{ level }}"

Zbieranie logów Dockera

[sources.docker]
type = "docker_logs"
docker_host = "unix:///var/run/docker.sock"
# Opcjonalnie filtruj kontenery:
# include_labels = ["com.docker.compose.project=myapp"]
# exclude_containers = ["vector"]

[transforms.enrich_docker]
type = "remap"
inputs = ["docker"]
source = '''
  # Metadane kontenera są automatycznie w zdarzeniu
  .host = get_hostname!()
  # Spróbuj sparsować JSON w message
  parsed, err = parse_json(.message)
  if err == null {
    . = merge(., parsed)
  }
'''

[sinks.loki_docker]
type = "loki"
inputs = ["enrich_docker"]
endpoint = "http://loki:3100"
encoding.codec = "json"

[sinks.loki_docker.labels]
host = "{{ host }}"
container = "{{ container_name }}"
image = "{{ image }}"

VRL — Vector Remap Language

VRL to domenowy język do transformacji zdarzeń. Przykłady najczęściej używanych operacji:

# VRL — przykłady transformacji

# Parsowanie JSON
.parsed = parse_json!(.message)

# Parsowanie logu Apache/Nginx combined format
. = parse_common_log!(.message)

# Ekstrakcja regex — wyciągnij ID z URL
.user_id = parse_regex!(.path, r'/users/(?P<id>\d+)').id

# Ustawianie poziomu logu na podstawie status_code
.level = if .status >= 500 {
  "error"
} else if .status >= 400 {
  "warn"
} else {
  "info"
}

# Usuwanie pola (prywatne dane)
del(.user_email)

# Zmiana nazwy pola
.duration_ms = del(.response_time)

# Dodanie timestampa jeśli brak
if !exists(.timestamp) {
  .timestamp = now()
}

Multi-output — Loki + S3 + Elasticsearch

Vector obsługuje wiele sinków jednocześnie — możesz wysyłać te same logi do wielu miejsc:

# Wyślij do Loki (hot storage — ostatnie 7 dni)
[sinks.loki]
type = "loki"
inputs = ["parse_nginx"]
endpoint = "http://loki:3100"
encoding.codec = "json"

[sinks.loki.labels]
host = "{{ host }}"
service = "nginx"

# Archiwum w S3 (cold storage — długoterminowe)
[sinks.s3_archive]
type = "aws_s3"
inputs = ["parse_nginx"]
bucket = "logs-archive"
region = "eu-central-1"
key_prefix = "nginx/%Y/%m/%d/"
encoding.codec = "ndjson"
compression = "gzip"
batch.max_bytes = 10000000   # 10 MB per plik

Benchmarki — Vector vs Logstash vs Fluentd

Metrika Vector Logstash Fluentd
Przepustowość (events/s) ~5 000 000 ~100 000 ~800 000
RAM (idle) ~20 MB ~512 MB (JVM) ~50 MB
CPU (pod obciążeniem) Najniższe Najwyższe Średnie
Język implementacji Rust Java/JRuby Ruby/C
Latency przy przetwarzaniu <1ms 10-100ms 5-50ms

Uwaga: Benchmarki mogą różnić się w zależności od środowiska i konfiguracji. Vector jest szczególnie wydajny przy prostych transformacjach. Logstash ma bogatszy ekosystem pluginów (np. dla Beats).

Testowanie i walidacja konfiguracji

# Waliduj konfigurację bez uruchamiania
vector validate /etc/vector/vector.toml

# Testuj pipeline na przykładowych danych
echo '127.0.0.1 - - [10/Apr/2026:10:00:00 +0200] "GET /api HTTP/1.1" 200 1234' | \
  vector --config /etc/vector/vector.toml

# Podgląd zdarzeń w czasie rzeczywistym (tap)
vector tap --outputs parse_nginx

# Statystyki wewnętrzne
vector top

Najczęstsze pytania

Czym jest Vector i czym różni się od Logstash i Fluentd? +
Vector to agent do zbierania, transformowania i wysyłania logów/metryk/traces, napisany w Rust. Jest wielokrotnie szybszy od Logstash (JVM, wysokie zużycie RAM) i Fluentd (Ruby). Vector ma natywny VRL (Vector Remap Language) do transformacji danych — bardziej wydajny niż Grok w Logstash. Obsługuje unified telemetry (logi, metryki i traces w jednym agencie). Idealny dla środowisk VPS gdzie zasoby są ograniczone.
Jakie są główne komponenty konfiguracji Vector? +
Vector konfiguruje się przez TOML (lub YAML/JSON). Trzy rodzaje komponentów: (1) Sources — skąd zbierać dane: file, syslog, docker_logs, stdin, socket, kafka, http. (2) Transforms — jak przekształcać: remap (VRL), filter, aggregate, route, throttle, aws_cloudwatch_logs_subscription_parser. (3) Sinks — dokąd wysyłać: elasticsearch, loki, s3, kafka, prometheus_remote_write, clickhouse, http. Komponenty łączy się przez pola inputs.
Co to jest VRL (Vector Remap Language)? +
VRL to domain-specific language do transformowania zdarzeń w Vector. Podobny do jq dla JSON, ale zaprojektowany dla logów. Operacje: parsowanie (.parsed = parse_json!(.message)), ekstrakcja regexa (.method, .path = parse_regex!(.message, /^(?P&lt;method&gt;\w+) (?P&lt;path&gt;\S+)/)), dodawanie pól, usuwanie, rename, typ casting. VRL jest kompilowany do bytecodu — bardzo szybki, błędy typów wykrywane w czasie kompilacji.
Jak zbierać logi z kontenerów Dockera przez Vector? +
Source docker_logs zbiera logi ze wszystkich kontenerów przez Docker Socket (/var/run/docker.sock). Każde zdarzenie ma automatyczne metadane: container_name, container_id, image, label.*. Możesz filtrować po labels przez include_labels lub exclude_containers. Zalecane: uruchom Vector jako kontener z mounted docker.sock, opcjonalnie jako sidecar w compose. Vector wysyła do Loki z labelami container i image dla wygodnego przeszukiwania.
Jak skonfigurować Vector do wysyłania logów do Grafana Loki? +
Sink loki w Vector wymaga endpoint (np. http://loki:3100) i labels — obowiązkowe dla Loki. Labels MUSZĄ być statyczne lub z pola zdarzenia przez składnię &#123;&#123; .container_name &#125;&#125;. Uwaga: Loki nie przyjmuje zbyt wielu unikalnych kombinacji labelowych (cardinality limit). Zalecane labels: host, service, level. Resztę metadanych umieść w structured_metadata (Loki 3.0+) lub body logów.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.