docs: Docker-Node-Logs — config-directory, adm-Gruppe, State-Rechte, namepass, TZ

This commit is contained in:
mm committed 2026-09-13 23:27:10 +02:00
1 parent d7149075a2
commit 158e3dd884
1 file changed
+17
+17
View File
@@ -5,6 +5,23 @@ Der Ausgang läuft über den **NetBird-Reverse-Proxy** (`imac-prometheus.x05.idx
mit **Bearer-Token** — dadurch funktioniert der Installer auch auf Maschinen, die **kein NetBird-Peer** sind
(Büro-LAN, Kundenlaptop, CGNAT, VM ohne Client).
### Docker-Nodes (kein journalctl im Image)
Läuft Telegraf als **Container** (offizielles `telegraf`-Image), ist der Journal-Weg nicht möglich: das Image ist Debian ohne `systemd` und hat **kein `journalctl`**; `/hostfs` ist zudem read-only. Dafür gibt es `scripts/syslog-tail.sh` — es liest die **Syslog-Dateien des Hosts** unter `/hostfs/var/log/`.
**Drei Fallstricke, die alle still scheitern** (kein `E!`, das Panel bleibt einfach leer):
1. **`--config-directory` muss im Command stehen.** Der Standard-CMD im Image ist nur `telegraf` und liest ausschließlich `/etc/telegraf/telegraf.conf`. Alles in `telegraf.d/` wird ohne diesen Schalter **ignoriert**. In `docker-compose.yml`:
```yaml
command: --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d
```
2. **Gruppe `adm` ergänzen** (`group_add: ["4"]`). Der Entrypoint des Images setzt Telegraf per `setpriv` auf **uid 999** — unabhängig von `user:` im Compose. `/var/log/syslog` gehört Gruppe `adm` (Modus 640), als uid 999 also nicht lesbar. Ohne `adm` gibt das Script nichts aus.
3. **State-Verzeichnis muss schreibbar sein** (`SYSLOG_STATE_DIR`). Voreinstellung ist `/tmp/telegraf-syslog`. Zeigt es auf ein nicht schreibbares Verzeichnis (z. B. `/var/lib/...` als uid 999), kann der Offset nie gespeichert werden — das Script landet bei **jedem** Lauf im Erstanlauf-Zweig und liefert dauerhaft nichts. Seit der aktuellen Version warnt es in dem Fall auf stderr.
**Output-Filter mitziehen:** `outputs.loki` filtert per `namepass`. Enthält der Block `namepass = ["docker_log"]`, wird das `journal`-Measurement verworfen und die System-Logs kommen nie an — auch wenn der Input läuft. `journal` ergänzen; im Remote-Write-Output gehört es in `namedrop` (Logs haben in Prometheus nichts zu suchen).
**Kein Zeitstempel im erzeugten Line Protocol.** Die Syslog-Zeit ist lokal (`+02:00`), `mawk` (Standard im Image) kennt keine Zeitzonen-Offsets — selbst berechnete Werte lagen 2 h in der Zukunft und Loki wies jeden Push ab: `has timestamp too new`. Ohne Zeitstempel stempelt Telegraf beim Einsammeln.
## System-Logs (PVE und Nicht-Docker-Hosts)
Bis Version dieses Abschnitts lieferten nur **Docker-Container** Logs nach Loki