diff --git a/scripts/journal-tail.sh b/scripts/journal-tail.sh index 8dbfb1b..8f857f1 100755 --- a/scripts/journal-tail.sh +++ b/scripts/journal-tail.sh @@ -21,6 +21,10 @@ set -u PRIORITY="${JOURNAL_PRIORITY:-warning}" # warning|err|info|debug +# Hartes Zeitbudget: Telegraf bricht den exec sonst ab (timeout 25s bei +# interval 30s). Wir lesen nie laenger als BUDGET Sekunden pro Aufruf — der +# Cursor macht den Rest beim naechsten Lauf. +BUDGET="${JOURNAL_BUDGET:-15}" SINCE="${JOURNAL_SINCE:-}" # optional, nur beim Erstanlauf MAX_LINES="${JOURNAL_MAX_LINES:-500}" # Schutz vor Flut pro Lauf STATE_DIR="${JOURNAL_STATE_DIR:-/var/lib/telegraf-journal}" @@ -39,7 +43,9 @@ fi last_cursor="" -journalctl "${args[@]}" 2>/dev/null | while IFS= read -r line; do +# --no-pager + hartes Zeitlimit: journalctl kann bei viel Aufkommen laenger +# brauchen als Telegrafs timeout erlaubt. +timeout -k 2 "$BUDGET" journalctl "${args[@]}" 2>/dev/null | while IFS= read -r line; do case "$line" in \{*) ;; *) continue ;; esac # Felder aus dem JSON ziehen (jq-frei, damit kein Extra-Paket nötig ist) diff --git a/telegraf/journal.conf b/telegraf/journal.conf index 2a16ff6..f35eb08 100644 --- a/telegraf/journal.conf +++ b/telegraf/journal.conf @@ -17,6 +17,6 @@ [[inputs.exec]] interval = "30s" - timeout = "25s" + timeout = "28s" data_format = "influx" commands = ["/etc/telegraf/journal-tail.sh"]