Zum Inhalt

Logs

Log-Pipeline: Alloy sammelt Logs aus Docker und UniFi-Geräten, VictoriaLogs speichert sie langfristig (5 Jahre auf NFS).

VictoriaLogs

GitHub · victoriametrics/victoria-logs:v1.48.0

Retention 5 Jahre (--retentionPeriod=5y)
Speicher /mnt/monitoring/victorialogs (NFS, ~10-25 GB/Jahr)
API Loki-kompatible Push-API (/insert/loki/api/v1/push)
Query-Sprache LogsQL
Konfiguration Nur CLI-Flags, keine Config-Datei

Automatische Indexierung aller Log-Felder — kein High-Cardinality-Problem wie bei Loki.

Warum VictoriaLogs statt Loki?

Das ursprüngliche Konzept sah Loki vor. Während der Implementierung wurde VictoriaLogs als bessere Alternative identifiziert:

Kriterium Loki VictoriaLogs
NFS-Fähigkeit Problematisch (WAL/Index braucht SSD) Voll NFS-fähig
SSD-Verbrauch ~180 GB/Jahr (WAL + Index) 0 GB (alles auf NFS)
RAM-Verbrauch Basis 70-87% weniger
Kompression Gut 40-80x (deutlich besser)
Konfiguration Separate YAML-Config (30+ Zeilen) Nur CLI-Flags (3 Flags)
Retention 1 Jahr (SSD-Limit) 5 Jahre (NFS, kein Limit)
Speicher/5y Nicht realistisch ~50-125 GB

Durch den Wechsel sank der SSD-Bedarf von ~186 GB auf ~7 GB (96% Reduktion).

Grafana-Integration

Über das Plugin victoriametrics-logs-datasource (installiert via GF_INSTALL_PLUGINS). Query-Sprache ist LogsQL statt LogQL.

Query-Syntax: _stream:{job="docker"} (nicht job="docker" wie bei Loki).

Alloy (Log-Collector)

GitHub · grafana/alloy:v1.14.0

Speicher /mnt/ssd/container-data/monitoring-stack/alloy (<1 GB WAL)
Docker-Socket Read-Only gemountet für Container-Discovery
Syslog-Port UDP 514
Stability-Level experimental (nötig für syslog_format = "raw")

Docker-Logs

Alle Container-Logs werden automatisch via Docker Socket Discovery gesammelt.

  • Labels: job=docker, source=docker
  • Processing: stage.docker {} (Docker-Log-Format parsen)
  • Zusätzliche Labels via discovery.relabel: container, compose_service, compose_project

UniFi Syslog

UniFi 9.x+ sendet CEF-Format (Common Event Format), nicht das erwartete RFC 3164/5424.

  • Labels: job=unifi, hostname, event_name, cef_severity, device_type
  • Erfordert syslog_format = "raw" mit Regex-Parsing via loki.process
  • Device-Type-Detection via Hostname-Regex:
Hostname-Pattern device_type
USW/US-* switch
UAP/U6-* access_point
UDM/USG/UXG* gateway
UNAS* nas

Write-Endpoint

loki.write "default" {
  endpoint {
    url = "http://victorialogs:9428/insert/loki/api/v1/push"
  }
  wal {
    enabled         = true
    max_segment_age = "1h"
  }
}

DAC_OVERRIDE Capability

Alloy benötigt cap_add: DAC_OVERRIDE, weil cap_drop: ALL die Fähigkeit entfernt, als Root Verzeichnisse zu erstellen (nötig für /var/lib/alloy/data).