diff --git a/README.md b/README.md index 017c176..920cf89 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,26 @@ 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). +## Der Konfig-Test prüft ALLE Dateien + +Ein Detail, das schon eine Node lahmgelegt hat: **Nie mit `--input-filter` prüfen.** + +```sh +# FALSCH — validiert nur die gefilterten Plugins: +telegraf --config … --config-directory … --test --input-filter cpu:mem + +# RICHTIG — parst alle Dateien, genau wie der Dienststart: +telegraf --config … --config-directory … --test --test-wait 1 +``` + +Mit `--input-filter cpu:mem` überspringt Telegraf alle übrigen Konfigdateien. Ein ungültiges Feld in `telegraf.d/apache.conf` lief damit durch, der Installer meldete **„OK — Node liefert"**, und erst der Dienststart scheiterte danach mit: + +``` +Job for telegraf.service failed because the control process exited with error code. +``` + +Der Installer prüft deshalb ohne Filter und wertet nur echte Parser-Fehler (`E! … loading config file`) als Abbruch — nicht jede Warnung, denn ein fehlendes Input-Binary (`nvidia-smi`) zeigt sich erst beim Start, nicht beim Parsen. + ## Apache-Logs Mit `--role apache` (oder automatisch, wenn `apache2ctl`/`httpd` gefunden wird) bindet der Installer Apache ein — auf **zwei** Wegen aus derselben Datei: diff --git a/install.sh b/install.sh index e2b1bbd..a9ae9c0 100755 --- a/install.sh +++ b/install.sh @@ -475,19 +475,42 @@ if [ "$FORCE_UPDATE" -eq 1 ]; then log "Force-Update: Confs und Scripts werden neu geschrieben." fi +# -------------------------------------------------------------------------- # Konfig testen +# -------------------------------------------------------------------------- +# WICHTIG: NICHT mit --input-filter pruefen! Telegraf validiert dann nur die +# gefilterten Plugins und ueberspringt die uebrigen Konfigdateien. Ein Fehler in +# telegraf.d/apache.conf (z.B. ein ungueltiges Feld) lief damit durch, der +# Installer meldete "OK", und erst der Dienststart scheiterte: +# Job for telegraf.service failed +# Ohne Filter werden ALLE Dateien geparst — genau wie beim Dienststart. Das ist +# der einzige Test, der den Startfehler wirklich verhindert. TG="$(command -v telegraf || echo /usr/local/bin/telegraf)" set -a; . /etc/default/telegraf; set +a -if ! "$TG" --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d --test --input-filter cpu:mem >/dev/null 2>&1; then + +conf_test() { + _out="$("$TG" --config /etc/telegraf/telegraf.conf \ + --config-directory /etc/telegraf/telegraf.d --test --test-wait 1 2>&1)" + _rc=$? + # Nur echte Konfigurationsfehler zaehlen. Ein fehlendes Input-Binary + # (nvidia-smi) erscheint erst beim Start als E!, nicht beim Parsen — und + # Sammel-Warnungen wie die DeprecationNotice sind harmlos. + if [ "$_rc" -ne 0 ] || printf '%s' "$_out" | grep -q '^.*E!.*loading config file'; then + printf '%s\n' "$_out" | grep -E 'E!' | head -5 >&2 + return 1 + fi + return 0 +} + +if ! conf_test; then # Bei Force-/Auto-Update zuerst zurueckrollen, dann erst aufgeben. if [ "$FORCE_UPDATE" -eq 1 ] || [ "$UPDATE_ONLY" -eq 1 ]; then log "Konfiguration ungültig — Rollback auf die letzte Sicherung." rollback_conf || true - "$TG" --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d --test --input-filter cpu:mem >/dev/null 2>&1 \ - || die "Konfiguration auch nach Rollback ungültig — telegraf --test prüfen." + conf_test || die "Konfiguration auch nach Rollback ungültig — telegraf --test prüfen." log "Rollback erfolgreich, alte Konfiguration aktiv." else - die "Konfiguration ungültig — telegraf --test prüfen." + die "Konfiguration ungültig — siehe Meldung oben. Einzelne Datei pruefen mit: telegraf --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d --test" fi fi