diff --git a/install.sh b/install.sh index 5236d79..e59f502 100755 --- a/install.sh +++ b/install.sh @@ -54,6 +54,7 @@ REPO_RAW="${REPO_RAW:-https://gitea.m-m.bio/mm/netbird-telegraf-installer/raw/br UNINSTALL=0 CHECK=0 SHOW_VERSION=0 +DIAGNOSE=0 FORCE_UPDATE=0 UPDATE_ONLY=0 TIMER_INTERVAL="" @@ -72,6 +73,7 @@ while [ $# -gt 0 ]; do --uninstall) UNINSTALL=1; shift ;; --check) CHECK=1; shift ;; --version) SHOW_VERSION=1; shift ;; + --diagnose) DIAGNOSE=1; shift ;; --force-update) FORCE_UPDATE=1; shift ;; --update-only) UPDATE_ONLY=1; shift ;; --install-update-timer) @@ -109,6 +111,61 @@ load_defaults() { die() { printf '\033[1;31m[netbird-telegraf] FEHLER:\033[0m %s\n' "$*" >&2; exit 1; } [ "$(id -u)" -eq 0 ] || die "Bitte als root ausführen (sudo)." +# -------------------------------------------------------------------------- +# --diagnose: prueft in EINEM Aufruf, warum ein Input nichts liefert. +# Prueft genau die Stellen, die schon still versagt haben: +# Rechte des Dienst-Benutzers, leere Dateien, Offset-Zustand, Parser-Fehler. +# -------------------------------------------------------------------------- +if [ "$DIAGNOSE" -eq 1 ]; then + printf '=== Telegraf-Installer Diagnose ===\n' + TG="$(command -v telegraf || echo /usr/local/bin/telegraf)" + printf '\n-- Dienst --\n' + if command -v systemctl >/dev/null 2>&1; then + printf 'Status: %s\n' "$(systemctl is-active telegraf 2>/dev/null || echo unbekannt)" + printf 'Benutzer: %s\n' "$(systemctl show telegraf -p User --value 2>/dev/null || echo unbekannt)" + printf 'Gruppen: %s\n' "$(systemctl show telegraf -p SupplementaryGroups --value 2>/dev/null || echo -)" + fi + DBU="$(systemctl show telegraf -p User --value 2>/dev/null || echo telegraf)" + [ -n "$DBU" ] || DBU=telegraf + + printf '\n-- Logpfade aus der aktiven Conf --\n' + CF="/etc/telegraf/telegraf.d/apache.conf" + [ -f "$CF" ] || CF="/etc/telegraf/telegraf.conf" + _files="$(sed -n 's/^[[:space:]]*files = \[\(.*\)\].*/\1/p' "$CF" | tr -d '"' | tr ',' ' ')" + [ -n "$_files" ] || { printf ' (keine files-Liste gefunden)\n'; } + _n=0; _ok=0; _empty=0; _noread=0 + for _f in $_files; do + _n=$((_n+1)) + if [ ! -e "$_f" ]; then printf ' FEHLT %s\n' "$_f"; continue; fi + _size="$(stat -c %s "$_f" 2>/dev/null || echo 0)" + if [ "$_size" -eq 0 ]; then printf ' LEER (0 B) %s\n' "$_f"; _empty=$((_empty+1)); continue; fi + # Lesbarkeit aus Sicht des Dienst-Benutzers — das war die stille Fehlerquelle. + if [ "$(id -u)" -eq 0 ] && command -v su >/dev/null 2>&1 && id "$DBU" >/dev/null 2>&1; then + if su -s /bin/sh "$DBU" -c "head -c 1 '$(_f//\'/\'})' >/dev/null 2>&1"; then + printf ' OK %s (%s Bytes)\n' "$_f" "$_size"; _ok=$((_ok+1)) + else + printf ' NICHT LESBAR %s (Benutzer %s) ← URSACHE\n' "$_f" "$DBU"; _noread=$((_noread+1)) + fi + else + printf ' vorhanden %s (%s Bytes)\n' "$_f" "$_size" + fi + done + printf ' -> %s Pfade, %s lesbar, %s leer, %s nicht lesbar\n' "$_n" "$_ok" "$_empty" "$_noread" + + printf '\n-- Parser-Test (ohne Offset-Zwang) --\n' + _out="$("$TG" --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d --test --test-wait 2 2>&1)" + printf '%s\n' "$_out" | grep -c 'E!' | sed 's/^/ Fehlerzeilen: /' + printf '%s\n' "$_out" | grep -E 'E!' | head -3 | sed 's/^/ /' + printf '%s\n' "$_out" | grep -cE '^[>] ' | sed 's/^/ erzeugte Messungen: /' + + printf '\n-- Offset-Zustand (erste Messung je Datei erst nach neuem Zugriff) --\n' + ls -la /var/lib/telegraf/ 2>/dev/null | tail -5 || printf ' (kein State-Verzeichnis)\n' + printf '\nHinweis: initial_read_offset = "saved-or-end" bedeutet, dass beim ERSTEN\n' + printf 'Lauf nur NEUES gelesen wird. Bestehende Zeilen kommen erst mit neuen\n' + printf 'Zugriffen. Fuer einen sofortigen Test: eine Datei anfordern und warten.\n' + exit 0 +fi + # Reine Abfragen brauchen keinen Token und kein root (Timer-Verwaltung schon). if [ "$SHOW_VERSION" -eq 1 ] || [ "$CHECK" -eq 1 ]; then LOCAL_V="$(cat /etc/telegraf/CONFIG_VERSION 2>/dev/null || echo 'nicht installiert')"