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 vialoki.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).