Commit Graph
21 Commits
Author SHA1 Message Date
mm df2ee94613 fix(survey): Fortschritt sichtbar — der leere bestand.txt war kein Fehler, sondern ein laufender Scan
BEFUND (x22, gemessen und reproduziert):
Der Aufruf war 'python3 apache-log-survey.py 2>&1 | tee bestand.txt'. Das Skript
gab ALLES erst nach der Scan-Schleife aus (alle print() standen dahinter), und
Python puffert stdout in eine PIPE blockweise (4-8 KB). Die Gesamtausgabe ist
aber nur ~1 KB -> sie landete erst beim Prozessende in der Datei.

Messung mit 2 Mio Zeilen (140 MB):
  mit tee:     nach 5 s = 0 Bytes, fertig nach 41 s -> dann 1028 Bytes
  ohne Pipe:   nach 1 s = 0 Bytes
  python3 -u:  nach 1 s = 0 Bytes
=> Die Datei war leer, weil der Scan LIEF. Auf einem KeyHelp-Host mit tausenden
   Logdateien dauert das Minuten und liest sich wie ein Haenger oder Absturz.

FIX (drei Massnahmen, damit das nie wieder passiert):
1. sys.stdout.reconfigure(line_buffering=True) — jede Zeile geht sofort raus,
   auch durch eine Pipe.
2. Startbanner VOR dem Scan: Anzahl und Gesamtgroesse der Dateien.
3. Fortschrittszeile pro Datei (Nummer/Gesamtzahl, Zeilen, Groesse, Pfad) plus
   eine Zeile fuer nicht lesbare Dateien.

Verifiziert mit 1,4 Mio Zeilen durch eine Pipe: nach 2 s steht das Banner, drei
Fortschrittszeilen erscheinen waehrend des Scans. Gegenprobe mit dem alten Code:
nach 3 s 16 Bytes, alles erst am Ende.
2026-09-14 12:08:48 +02:00
mm 194fa98f97 fix(archive): Error-Logs ohne Zeitzone wurden STILL verworfen + Backfill-Skript
BEFUND (echter Datenverlust, gemessen gegen KeyHelp-Formate):
KeyHelp/Debian schreiben error.log im Access-Format, aber OHNE Zeitzone:
    [01/Sep/2026:10:00:05] [core:error] [pid 9] AH00124: ...
TS_FORMATS kannte nur "%d/%b/%Y:%H:%M:%S %z" (MIT Zone). parse_ts() gab None,
hour wurde "unknown", und der Schreiber ueberspringt unknown-Zeilen:
apache_archive_errors_total fehlte KOMPLETT — kein Fehler, kein Log, Panel leer.
Genau die stille Fehlerklasse, die nicht passieren darf.

FIX:
- Format "%d/%b/%Y:%H:%M:%S" (ohne Zone) ergaenzt.
- Unparsbare Zeitstempel werden GEZAEHLT und laut gemeldet (Domain + Beispiel +
  Hinweis auf TS_FORMATS) statt still zu verschwinden.
- Neu: scripts/x22-log-backfill.sh — messen (read-only) und parsen in einem
  Aufruf, mit Selbstpruefung (Einheiten, Zukunft, Domain-Anzahl) VOR der
  Uebergabe und dem sicheren Import-Befehl am Ende.

Verifiziert im Container gegen echte KeyHelp-Formate inkl. rotierter .1 und
.gz-Datei: Messmodus aendert nichts (MD5-Vergleich), Backfill erzeugt alle
fuenf Metriken inkl. errors_total{level=error} und {level=warn}.
2026-09-14 11:49:05 +02:00
mm 7d3ce17c53 fix(archive): Anleitung zeigt auf das Archiv, nie auf die Produktions-TSDB; x22-Wrapper mit --file 2026-09-14 11:43:19 +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 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 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 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 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
mm 72756babae feat(proxmox): pvesh-basierter exec-Input statt inputs.proxmox (kein Token/ACL noetig) 2026-09-13 21:17:48 +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 1a3205b31a fix(gpu-amd): Parser ueber Spaltenkopf statt Einheitensuffix (rocm-smi liefert Einheiten nur im Header); VRAM, Junction-/Memory-Temp 2026-09-13 20:25:47 +02:00
mm 0674360563 fix(gpu-amd): Metriknamen statt Tag metric=; Parser sucht Werte anhand der Einheit 2026-09-13 20:24:40 +02:00
mm a19bd82189 feat: GPU-Auto-Erkennung (nvidia_smi, rocm-smi); Testserver-Aufraeumen dokumentiert 2026-09-13 20:11:26 +02:00