Commit Graph
67 Commits
Author SHA1 Message Date
mm 7ec5d44517 docs: Timeout-Tabelle + ACL-Phase dauert bis 3 Minuten 2026-09-14 10:29:49 +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 d11849b6d9 docs: sicheren Installationsweg nach vorne (erst laden, dann ausfuehren) 2026-09-14 10:23:01 +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 0e94bf4d91 docs: Error-Log-Erfassung dokumentiert (LogQL-Beispiele, drei stille Fallen) 2026-09-14 10:03:21 +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 6d0d0bd900 fix(apache): Aggregator gegen Zeitstempel-Kollisionen + README korrigiert
Die vorige Massnahme (log_time statt ts) war NICHT ausreichend. Ursache ist
tiefer: Telegraf schreibt pro Sammelzyklus EINEN Zeitstempel fuer den ganzen
Batch, und Remote Write kann nur Millisekunden. Zwei Requests derselben Serie
in derselben Millisekunde -> Prometheus lehnt den ganzen Batch ab -> FIFO-Kopf
sitzt fest -> Node liefert gar nichts mehr (derselbe eingefrorene Timestamp
alle ~15s im Log).

Ein Zeitstempel-Trick kann das nicht loesen. Aggregation schon: basicstats
fasst alle Metriken einer Serie pro 60s zu einem Punkt zusammen. Gemessen an
2000 echten x22-Zeilen: 2000 Punkte -> 4 Punkte, 0 Kollisionen, Requests
vollstaendig gezaehlt (1997).

VERSION 1.2.0, damit der Auto-Updater den Fix ausrollt.
2026-09-14 02:01:13 +02:00
mm a9d9b92499 fix(apache): Aggregator gegen Zeitstempel-Kollisionen (Wurzel, nicht Symptom) 2026-09-14 01:59:44 +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 24c04f8eff docs: Backfill-Weg fuer alte Logs (messen -> archivieren -> nur ins Archiv einspielen) 2026-09-14 01:29:01 +02:00
mm 4da9a59527 feat(archive): x22-Log-Archiv-Skript (messen + Backfill, mit Selbstpruefung) 2026-09-14 01:27:31 +02:00
mm 49f5dbc335 chore: __pycache__ nicht committen 2026-09-14 01:25:55 +02:00
mm 5483a4fea8 fix(apache): Sekunden-Kollision behoben (log_time + converter) — Node lieferte gar nichts mehr
Echte x22-Logs: 2000 Zeilen -> 286 Kollisionen (duplicate sample).
Telegraf uebernimmt den Log-Zeitstempel; bei mehreren Treffern pro Sekunde
kollidiert der +1ms-Aufschlag mit echten Zeilen. Prometheus weist den Batch
ab, Telegraf retryt endlos -> FIFO steht -> Node liefert GAR NICHTS mehr.

Fix: eigenes Grok-Muster mit log_time als Feld (Telegraf nutzt eigene ns-Uhr)
+ processors.converter, damit resp_code/verb Tags bleiben.
Gemessen: 2000/2000 Samples, 0 Kollisionen.

Ausserdem: Einheiten-Waechter im Archiver (ms statt s -> Abbruch statt
nutzloser Block).
2026-09-14 01:25:51 +02:00
mm 5a213eb580 docs: ACL-Loesung fuer User-Home-Logs + Glob-Muster dokumentiert 2026-09-14 00:45:01 +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 911823514d docs: --diagnose dokumentiert 2026-09-14 00:36:46 +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 ce52d2c26b docs: Apache-Logpfad-Sammlung (KeyHelp zweistufig) + Quoting-Pflicht in /etc/default/telegraf 2026-09-14 00:32:24 +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 b0f8cb860d docs: sudo-Regel verallgemeinert — PVE, x17/Root-Server, LXC brauchen kein sudo 2026-09-13 23:52:56 +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 0e9dce9e47 docs: Updater-Konzept (VERSION+Hash, Timer, force-update, Rollback) 2026-09-13 23:36:38 +02:00
mm 158e3dd884 docs: Docker-Node-Logs — config-directory, adm-Gruppe, State-Rechte, namepass, TZ 2026-09-13 23:27:10 +02:00
mm d7149075a2 fix(logs): State-Dir default /tmp + laute Warnung wenn nicht beschreibbar (stiller Totalausfall) 2026-09-13 23:14:20 +02:00
mm c67600f147 fix(logs): Syslog-Zeitstempel nicht selbst berechnen (TZ-Fehler -> Loki wies alles als "too new" ab); adm-Gruppe fuer Host-Logrechte 2026-09-13 23:11:54 +02:00
mm 8d331abe8b feat(logs): syslog-tail.sh fuer Docker-Nodes (kein journalctl im Image, /hostfs read-only) 2026-09-13 22:53:04 +02:00
mm e6aa70d5c7 docs: System-Logs (journald) dokumentiert — warum nicht inputs.journal / syslog 2026-09-13 22:32:32 +02:00
mm 8ca06bd6d6 perf(logs): journal-tail parst in einem awk-Durchlauf (11s -> 143ms, exec-Timeout behoben) 2026-09-13 22:32:07 +02:00
mm b49f9ccbfd fix(logs): Zeitbudget im journal-tail (exec timed out bei grossem Journal) 2026-09-13 22:29:55 +02:00
mm 8990124c2b fix(logs): journal-LP-Tag jhost statt host (Kollision mit Telegraf global_tag) 2026-09-13 22:28:27 +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 49b5811d94 fix(logs): inputs.journal existiert in offiziellen Builds nicht — tail auf /var/log/syslog, value->message 2026-09-13 22:18:55 +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 17a3e2e746 fix(proxmox): pvenode statt node als Label — node-Filter bleibt konsistent zu den Host-Metriken 2026-09-13 21:45:17 +02:00
mm 3249c62de1 docs: README konsistent — PVE ohne Token, Root-Drop-in, Pruef-Reihenfolge 2026-09-13 21:41:19 +02:00
mm 2c8b805937 docs(pve): kein Token noetig, pvesh statt inputs.proxmox; Root-Drop-in dokumentiert 2026-09-13 21:35:11 +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 d2fa6420be feat(proxmox): Counter mit _total-Suffix, mem_usage_percent, swap, diskread/write; gegen pvesh-Reala usgabe 2026-09-13 21:21:04 +02:00