40 Commits
Author SHA1 Message Date
mm 72752e523e chore(installer): Update-Only meldet gesetzte ACLs ehrlich + VERSION 1.9.1 2026-09-14 11:29:19 +02:00
mm e2c75a88df fix(acl): _touched initialisieren — unter set -u brach die Rechtevergabe kommentarlos ab 2026-09-14 11:22:06 +02:00
mm 6f82bad6f9 fix(acl): Glob-Wurzeln brauchen r-x — Ursache der stummen Datenluecke auf x14
x14 sendete 105 Metriken, aber KEINE apache-Metriken und keine Logs. Der
Installer meldete Erfolg. Telegraf selbst nannte den Grund:

  W! [inputs.tail] Directory "/home/users" is not readable but is followed
     by wildcards, make sure you set read permissions or globbing will not work!

Drei Ursachen, alle behoben:

1. `setfacl -m u:telegraf:x` auf der Glob-Wurzel ist FALSCH. Eine Wildcard wird
   per readdir expandiert — dafuer braucht das Verzeichnis `r-x`, nicht nur `x`.
   Neue Logik: Muster werden mit `set -f` gelesen, dann je Treffer die Datei mit
   `r` und JEDE Ebene zwischen Wurzel und Datei mit `r-x` belegt.
   Gemessen: alte ACL -> 1 Warnung, 1 Punkt (nur /var/log/apache2);
   neue ACL -> 0 Warnungen, 4 Punkte (alle 3 Dateien inkl. User-Homes).

2. Der Gegentest war blind: er las jede gefundene Datei per `head -c 1` als
   telegraf. Das konnte nicht fehlschlagen, weil die Datei vom ROOT-Shell
   expandiert wurde — die Glob-Wurzel blieb unlesbar, Telegraf bekam 0 Treffer,
   die Meldung sagte trotzdem "alle N Logdateien lesen". Jetzt wird die
   GLOB-AUFLOESUNG gemessen: dasselbe Muster im Dienstkontext expandieren und die
   Trefferzahl vergleichen. 0 von 0 zaehlt als Fehler, nicht als Erfolg.

3. `for p in $_pfadquelle` ohne `set -f` expandiert die Muster im Root-Shell.
   _pattern war danach ein konkreter Dateiname, der Wildcard-Zweig lief nie, und
   die ACL landete nur auf den Dateien. Real passiert: "ACL auf 3 Datei(en)",
   "kein Glob-Muster gefunden", 0 Treffer im Dienst.

Verifiziert mit echtem Telegraf 1.40.0 und REALEN KeyHelp-Rechten
(/home/users/<user> 0700, logs 0750, Dateien 0640).
2026-09-14 11:21:00 +02:00
mm ea5b796012 fix(installer): envsubst-Redirection wiederhergestellt — DAS war der x14-Haenger
Der Trace auf x14 endete exakt hier:
  + envsubst ${NODE_NAME} ... ${APACHE_ERROR_FILES}
  root@x14:/home/mm#

Ohne "< \$2.tmp" liest envsubst STDIN. Bei sh install.sh vom Terminal ist stdin
die Konsole -> der Installer wartet auf Eingabe, nach der letzten Meldung
"Schreibe Konfiguration ...". Genau das Bild: Stillstand, ^C, kein Fehler.
Bei curl | sh waere es schlimmer: envsubst wuerde den Rest des Skripts fressen.

Ein frueherer Patch von mir hat die Redirection verschluckt; alle Laeufe mit
vorhandener telegraf.conf (x22) liefen trotzdem, weil dort nur der Fallback
subst_vars() aktiv war. Erst der Erstinstall (x14) traf envsubst.

Verifiziert: vorher Haenger bei envsubst, jetzt vollstaendiger Durchlauf mit
CONFIG_VERSION-Marker und allen Confs.
2026-09-14 10:42:21 +02:00
mm 6a881ce674 fix(acl): Durchgangsrecht auf Elternverzeichnisse + Gegentest prueft ALLE Pfade
Zwei reale Fehler, beide still:

1. setfacl -R lief nur ab dem logs/-Verzeichnis. /home/users/<user> ist auf
   Panel-Hostern chmod 700 — ohne Durchgangsrecht (x) auf den ELTERNTEIL kommt
   telegraf nicht bis zur Datei. Die Meldung sagte trotzdem "ACL gesetzt".
   Fix: x auf allen Elternverzeichnissen bis zur Wurzel + Default-ACL, damit
   neu angelegte Domain-Ordner erben.

2. Der Gegentest brach beim ERSTEN Treffer ab. Das war
   /var/log/apache2/keyhelp/access.log (root:adm, immer lesbar) -> Meldung
   "Gegentest OK", waehrend ALLE Domain-Logs in den User-Homes unlesbar
   blieben. Fix: jeden Logpfad pruefen und die Anzahl der Fehlschlaege melden.

Verifiziert in Debian-12 mit KeyHelp-aehnlichen Rechten (Home 700, Logs 640).
2026-09-14 10:36:04 +02:00
mm 60727fe666 fix(installer): Fortschritt vor der Konfigurations-Phase melden (VERSION 1.6.0) 2026-09-14 10:33:43 +02:00
mm c7ab78e9dd fix(acl): nur Log-Verzeichnisse, Timeout pro Wurzel
setfacl -R lief ueber die GANZE Panel-Wurzel (/home/users) — dort liegen auch
Mails, Webinhalte und Backups. Das Recht auf die Logs waere damit teuer und
wirkungslos zugleich. Jetzt werden die logs/-Verzeichnisse eingesammelt
(find -maxdepth 3), und jeder setfacl-Lauf hat ein Timeout von 120 s, damit
ein langsamer Lauf nicht wie ein Haenger aussieht.
2026-09-14 10:33:32 +02:00
mm f5b98d2807 fix(installer): Haenger nach "bereits installiert" behoben (VERSION 1.5.0)
x14 blieb nach der letzten Erfolgsmeldung stehen (Abbruch per ^C, kein Fehler).
Ursache: grant_apache_log_access() ruft apt-get install acl auf — OHNE
apt-get update davor und OHNE Timeout. Bei veralteten Paketlisten kann apt in
eine Rueckfrage laufen und unbegrenzt warten. Direkt danach haette der naechste
fetch gehangen: fetch() hatte ueberhaupt kein curl-Timeout.

Fix:
- apt-get update vor dem acl-Install, timeout 180 auf allen Paketmanager-Aufrufen
- fetch() mit -m 30 + 3 Versuchen statt unbegrenztem Warten
- alle weiteren curl-Aufrufe (keyring, Binary, Re-Exec) mit -m/--connect-timeout
- Fortschrittsmeldung vor der ACL-Phase: ein Haenger sah wie ein Absturz aus
2026-09-14 10:29:12 +02:00
mm 906da69481 fix(installer): Re-Exec nur bei echter Pipe ([ -p /dev/stdin ])
Bei `sh install.sh` oder `< eingabe` ist stdin eine Datei — dort kann kein
Unterbefehl das Skript wegfressen. Der Re-Exec war dort unnoetig und kostete
einen Download. Nur `curl … | sh` (echte Pipe) braucht den Neustart.
2026-09-14 10:21:57 +02:00
mm 06ad67f8f5 fix(installer): Re-Exec auch ohne curl (wget/busybox/lokale Quelle)
Auf einem frischen System fehlt curl haeufig — genau dort, wo apt laeuft und
der Schutz am noetigsten ist. Der Re-Exec scheiterte deshalb still und der
Installer lief ohne Schutz weiter.

Jetzt: curl -> wget -> busybox wget -> lokale Quelle (NETBIRD_TG_SOURCE).
Ist keiner verfuegbar, wird das ausdruecklich gemeldet statt still uebergangen.
2026-09-14 10:19:44 +02:00
mm 9e6593a6f6 fix(installer): Re-Exec sichtbar melden (Selbstschutz-Diagnose) 2026-09-14 10:17:36 +02:00
mm 1eb7976ec8 fix(installer): Selbstschutz gegen stdin-Frass bei curl|sh (VERSION 1.4.0)
x14 brach mitten in der Installation ab: der Installer gab seinen eigenen
Quelltext aus ("; then", Kommentarzeilen) und blieb stehen.

Ursache: Bei `curl ... | sh` liest die Shell das Skript aus STDIN. apt startet
auf Ubuntu `needrestart` (Meldung "Scanning processes... / Scanning linux
images..."), und das liest stdin — damit war der Rest des Skripts weg. Die
Shell setzte mitten im Quelltext fort. Bei x22 trat es nicht auf, weil Telegraf
dort schon installiert war (kein apt-Lauf).

Fix, drei Schutzschichten:
1. Re-Exec: laeuft das Skript ueber eine Pipe, laedt es sich frisch von der
   Quelle und startet sich neu — mit stdin auf /dev/null. NICHT per cat von
   stdin kopieren: die Shell puffert bereits, die Kopie waere unvollstaendig.
2. NEEDRESTART_MODE=a + DEBIAN_FRONTEND=noninteractive fuer alle apt-Aufrufe.
3. </dev/null an jedem Paketmanager (apt, dnf, yum, apk).
2026-09-14 10:14:10 +02:00
mm 3236d9cede feat(apache): Error-Logs erfassen + drei stille Fallen behoben (VERSION 1.3.0)
Bisher wurden NUR access.log gesammelt — real nachgemessen: 31 logfile-Labels,
0 davon error.log. Bei einem KeyHelp-Host mit PHP/CMS fehlten damit genau die
Fehler, fuer die man ins Monitoring schaut.

Error-Logs jetzt in einem EIGENEN Input (name_override=apache_error), roh nach
Loki, mit Tags logtype=error und logfile=<pfad>. Getrennt vom Access-Grok, weil
das Format nicht passt:
  [Mon Sep 14 00:10:01.123456 2026] [core:error] [pid 9] AH00124: ...
Liefen sie durch den Access-Parser, entstuenden keine Metriken, aber der
Aggregator wuerde sie in leere Gruppen einordnen.

DREI STILLE FALLEN dabei gefunden und behoben:
1. processors.rename hatte namepass=["journal"] — apache_error behielt das
   Feld value, jede Panel-Query mit {.message} haette es nicht gefunden.
2. outputs.loki namepass enthielt apache_error nicht — Input sammelt ein,
   Output verwirft, keine Fehlermeldung, Panels leer (wie bei journal damals).
3. outputs.prometheus namedrop ebenso — sonst wandern Textzeilen in die TSDB.

Verifiziert gegen echte KeyHelp-Formate: access=2 Metriken, error=4 Rohzeilen,
Feld heisst message, 0 Error-Zeilen als Metrik.
2026-09-14 10:03:13 +02:00
mm d684ce860d fix(installer): --update-only ohne --token/--name auf bestehender Node
Zwei Fehler, gleiche Wurzel — die Werte aus /etc/default/telegraf wurden nur
vom Auto-Updater gelesen, nicht von einem manuellen --update-only:

1. Abbruch "Kein Token", obwohl der Token auf der Maschine liegt. Der Weg
   fuer eine Reparatur auf einer laufenden Node war damit verschlossen.
2. Stiller: ohne --name fiel NODE_NAME auf den Hostnamen zurueck. Auf einem
   KeyHelp-Host (x22 vs x22.idx.wf-keyhelp) waere die Node unter falschem
   Label registriert worden; ein PVE-Knoten haette seine Rolle verloren
   (kein pvesh-Drop-in mehr).

Fix: Token, NODE_NAME, ROLE, COLLECTOR, PVE_* aus der Datei nachladen, aber
nur wenn die Kommandozeile nichts anderes sagt (NAME_GIVEN/ROLE_GIVEN).

Zusaetzlich ein zweiter, ernster Fund aus dem Test:
APACHE_FILES blieb leer, wenn ROLE=apache gesetzt war, Apache aber nicht
erkannt wurde. Die Conf rendert dann zu "files = " -> ungueltiges TOML ->
Telegraf startet nicht -> ALLE Metriken der Node aus. Berechnung jetzt
unabhaengig vom Guard, plus Sicherheitsnetz vor dem Rendern.
2026-09-14 01:34:15 +02:00
mm 3c0c800f90 fix(apache): Glob-Muster in der Conf behalten (set -f statt Expansion) + ACL fuer User-Home-Logs (KeyHelp) + Diagnose entdoppelt 2026-09-14 00:43:39 +02:00
mm 963546641b fix(diagnose): Quoting des Pfads im Lesbarkeitstest 2026-09-14 00:35:59 +02:00
mm 711d8bdc1d feat(diagnose): --diagnose prueft Leserechte, leere Dateien, Parser und Offset in einem Aufruf 2026-09-14 00:35:11 +02:00
mm cba503e174 fix(installer): /etc/default/telegraf quoten + robustes Sourcing (load_defaults); apache-Logpfade sammeln statt ersten nehmen 2026-09-14 00:32:07 +02:00
mm d614ffa56a fix(apache): KeyHelp-Pfadmuster /home/users/*/logs/*/access.log (zweistufig) + Plesk/cPanel 2026-09-14 00:26:49 +02:00
mm 2b853529f9 fix(apache): Logpfade als TOML-Liste + CustomLog-Erkennung zuerst (KeyHelp-VHost-Logs) 2026-09-14 00:24:31 +02:00
mm 33eb5f2308 fix(installer): Konfig-Test ohne --input-filter — validierte nur gefilterte Plugins, Dienststart scheiterte danach 2026-09-14 00:21:05 +02:00
mm 02af5b428f feat(apache): Glob ueber VHost-Logs fuer Panel-Hoster (KeyHelp/Plesk/cPanel) 2026-09-14 00:16:42 +02:00
mm da3f221c8d fix(apache): from_beginning existiert bei inputs.tail nicht (Dienststart scheiterte) + COMMON/COMBINED_LOG_FORMAT; Logpfad-Autoerkennung 2026-09-14 00:14:45 +02:00
mm feb77e2fc7 fix: TELEGRAF_OPTS leer setzen — beseitigt systemd-Warnung "Referenced but unset" 2026-09-13 23:56:39 +02:00
mm cc5dc6b9ad fix(updater): nur eigene Confs entfernen — fremde/manuelle Confs ueberleben Update 2026-09-13 23:51:16 +02:00
mm 8d05d3bc48 feat(updater): --check/--version, --force-update mit Rollback, --update-only, systemd-Timer + Windows-Task; VERSION+SHA-Marker; envsubst-Fallback 2026-09-13 23:44:02 +02:00
mm 258157c943 fix(logs): journald via exec+Cursor statt inputs.journal (existiert nicht) bzw. syslog (fehlt auf PVE) 2026-09-13 22:27:26 +02:00
mm e1da311488 feat(logs): journald-Input — PVE/Nicht-Docker-Nodes lieferten bisher gar keine Logs 2026-09-13 22:16:46 +02:00
mm eea9f7fce4 feat(node-info): LAN-IP, NetBird-IP/FQDN und PVE-URL als node_info-Metrik auf jeder Node 2026-09-13 21:56:14 +02:00
mm c73e4d1773 fix(proxmox): systemd-Drop-in User=root — pvesh braucht root, Dienst lief als telegraf und lieferte still nichts 2026-09-13 21:30:44 +02:00
mm 72756babae feat(proxmox): pvesh-basierter exec-Input statt inputs.proxmox (kein Token/ACL noetig) 2026-09-13 21:17:48 +02:00
mm 0dbfc12b9b fix: base.conf ebenfalls rendern (NODE_NAME/URLs/Token blieben als Platzhalter); Warnung bei unaufgeloesten Platzhaltern 2026-09-13 20:52:16 +02:00
mm 090984e7f9 fix(gpu): fauler Input killte telegraf — nvidia_smi nur bei echtem nvidia-smi, Intel ohne GPU-Input, Selbstheilung bei Startfehler 2026-09-13 20:48:52 +02:00
mm d8b910063e fix(proxmox): Conf-Platzhalter rendern (fetch_conf), PVE-Erkennung vor dem Schreiben der Env; README mit Token-Anlage 2026-09-13 20:39:44 +02:00
mm 5326d90975 feat(proxmox): --pve-node/--pve-url, additional_vmstats_tags, node_name-Erkennung per pvesh 2026-09-13 20:37:19 +02:00
mm d8cb2432c5 fix(gpu-amd): Ausgabe im Prometheus-Format (kein _value-Suffix); data_format=prometheus 2026-09-13 20:32:52 +02:00
mm 9db71d207c fix(gpu-amd): name_override entfernt — zerstoerte die Metriknamen des Scripts (alle Werte -> gpu_value); Array-Syntax fuer commands 2026-09-13 20:30:19 +02:00
mm f99e46fd96 fix: fetch-Pfade vollstaendig (scripts/gpu-rocm.sh lag unter scripts/, nicht telegraf/) 2026-09-13 20:21:28 +02:00
mm a19bd82189 feat: GPU-Auto-Erkennung (nvidia_smi, rocm-smi); Testserver-Aufraeumen dokumentiert 2026-09-13 20:11:26 +02:00
mm 9a878e8b8b feat: Telegraf node installer (Linux apt/dnf/apk/static, Proxmox, Apache, Docker; Windows PowerShell) 2026-09-13 17:26:42 +02:00