fix(logs): journald via exec+Cursor statt inputs.journal (existiert nicht) bzw. syslog (fehlt auf PVE)

This commit is contained in:
mm committed 2026-09-13 22:27:26 +02:00
1 parent 49b5811d94
commit 258157c943
3 files changed
+107 -32

No files matched your search

+18 -29
View File
@@ -1,33 +1,22 @@
# System-Logs (Syslog) → Loki
# System-Logs (journald) -> Loki
#
# Warum: inputs.docker_log deckt nur Container ab. PVE-Knoten und alle
# Nicht-Docker-Hosts lieferten damit gar keine Logs — genau dort stehen aber
# die relevanten Meldungen (pvedaemon, pveproxy, qemu, Kernel, Storage).
# Warum dieses Script statt eines Plugins:
# * inputs.journal existiert in den offiziellen Telegraf-Builds NICHT
# (Docker-Image UND InfluxData-Debian-Paket 1.40 geprueft, Web-Recherche
# bestaetigt: Plugin braucht einen Build mit systemd-Headern).
# * Auf PVE gibt es KEIN rsyslog -> /var/log/syslog existiert dort nicht.
# * Der JSON-Parser von inputs.exec liest nur ein Objekt, keine NDJSON-Zeilen.
# * Line Protocol direkt ist dasselbe bewaehrte Muster wie gpu-rocm.sh.
#
# Umsetzung: inputs.tail auf die Syslog-Dateien.
# HINWEIS: inputs.journal existiert in den offiziellen Telegraf-Builds NICHT
# (Docker-Image und InfluxData-Debian-Paket 1.40 wurden beide geprüft) — das
# Plugin braucht einen Build mit systemd-Headern. Deshalb der Datei-Weg.
# Cursor-Zustand liegt in /var/lib/telegraf-journal/cursor -> keine Duplikate,
# kein Verlust bei Neustart oder Journal-Rotation.
#
# Voraussetzung: rsyslog schreibt eine Datei. Auf PVE ist das /var/log/syslog
# (pve-manager hängt an rsyslog). Prüfen mit: ls -la /var/log/syslog
# Feintuning per Umgebungsvariable in /etc/default/telegraf:
# JOURNAL_PRIORITY=warning (warning|err|info|debug)
# JOURNAL_MAX_LINES=500
[[inputs.tail]]
# Fehlende Dateien sind unkritisch (Debian hat kein /var/log/messages).
files = ["/var/log/syslog", "/var/log/messages", "/var/log/kern.log", "/var/log/daemon.log"]
name_override = "journal"
# Default "saved-or-end": beim ersten Start nichts nachholen, danach merken.
initial_read_offset = "saved-or-end"
# Zeilen als Text durchreichen (kein Parsing nötig)
data_format = "value"
data_type = "string"
# Pfad als Tag, damit man in Loki nach Datei filtern kann
path_tag = "logfile"
# Feldname vereinheitlichen: tail/value liefert "value", das Logs-Panel
# erwartet (wie docker_log) "message". Umbenennen statt Panel-Sonderfall.
[[processors.rename]]
namepass = ["journal"]
[[processors.rename.replace]]
field = "value"
dest = "message"
[[inputs.exec]]
interval = "30s"
timeout = "25s"
data_format = "influx"
commands = ["/etc/telegraf/journal-tail.sh"]