{"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[proxmox] cloudflared auf 192.168.178.10: Browser zeigt: 530 The origin has been unregistered from Argo Tunnel; cloudflared logs: 'failed to dial to edge with quic: timeout: no recent network activity'; Tunnel verbindet sich kurz (Registered), bricht dann sofort wieder ab; Betrifft alle Subdomains des Tunnels; Alle 4 connIndex fallen nacheinander aus", "output": "**Cloudflare Tunnel 530 — QUIC-Timeouts, Tunnel nicht erreichbar** (Severity: critical)\n\nRoot Cause: UDP Port 7844 (QUIC-Protokoll) wird vom NAT-Router oder einer Firewall gedroppt. cloudflared wählt standardmäßig QUIC, scheitert nach kurzer Idle-Zeit, reconnectet dauerhaft — 530-Fehler für Endnutzer.\n\nFix: {\"steps\": [\"1. SSH auf cloudflared-Host\", \"2. /etc/systemd/system/cloudflared.service öffnen\", \"3. In ExecStart: '--protocol http2' vor 'tunnel run' einfügen\", \"4. systemctl daemon-reload && systemctl restart cloudflared\", \"5. Verify: journalctl -u cloudflared -n 5 | grep 'Registered' → alle connIndex zeigen protocol=http2\"]}\n\nPrevention: Bei jeder neuen cloudflared-Installation in NAT/Home-Lab-Umgebung sofort --protocol http2 setzen."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[proxmox] pvestatd auf 192.168.178.10: Proxmox GUI: alle Graphs leer (CPU, Memory, Network, Disk IO); CT/LXC/VM-Status-Icons fehlen oder zeigen falsche Farbe; API /nodes/pve/lxc/{id}/rrddata gibt nur 'time' zurück, keine Metriken; 'systemctl restart pvestatd' schlägt fehl mit: 'can't acquire lock'; Prozesszustand 'Ds' (D=uninterruptible sleep); SIGKILL hat keine Wirkung", "output": "**pvestatd D-State — Proxmox GUI Graphs leer, CT/VM-Status fehlt** (Severity: critical)\n\nRoot Cause: pvestatd-Prozess gerät in D-State beim Kernel-Aufruf free_pgtables. Tritt auf bei hoher I/O-Last (z.B. während Backup). SIGKILL kann D-State-Prozesse nicht beenden.\n\nFix: {\"steps\": [\"1. Stuck PID finden: pid=$(pgrep pvestatd | head -1)\", \"2. Prozess aus Cgroup verschieben: echo $pid > /sys/fs/cgroup/cgroup.procs\", \"3. Lock-Files entfernen: rm -f /var/run/pvestatd.pid.lock /var/run/pvestatd.pid\", \"4. Service reset + start: systemctl reset-failed pvestatd && systemctl start pvestatd\"], \"note\": \"Echter Fix nur via Reboot. Cgroup-Trick ermöglicht neuen pvestatd-Start ohne Reboot.\"}\n\nPrevention: Reboot des Proxmox-Hosts nach schweren Backup-Windows empfohlen."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[proxmox] opnsense-disk auf 192.168.178.10 (VM 123): Disk-Nutzung nahe dem Limit; OPNsense Web UI zeigt Warnung über Speicherplatz", "output": "**OPNsense Disk >75% — automatisches Log-Cleanup erforderlich** (Severity: warning)\n\nRoot Cause: OPNsense akkumuliert Suricata JSON-Logs, filterlog, dnsmasq-Logs, pkg-Cache und temporäre Dateien.\n\nFix: {\"steps\": [\"1. Alte Logs: find /var/log -name '*.log' -mtime +7 -delete\", \"2. Suricata: find /var/log/suricata -name '*.json' -mtime +3 -delete\", \"3. Temp: find /tmp /var/tmp -mtime +1 -delete\", \"4. Pkg-Cache: pkg clean -y\"]}\n\nPrevention: Automatisches Cleanup-Script als cron einrichten wenn Disk >75%."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[proxmox] swap auf 192.168.178.10: SWAP usage 77% bei nur 28% RAM-Nutzung; Prozesse wurden bei früherer Last ausgelagert und nicht zurückgeholt", "output": "**Swap 77% voll trotz 73% freiem RAM — Swappiness zu hoch** (Severity: warning)\n\nRoot Cause: Linux Standard-Swappiness von 60 lagert Pages aus auch wenn RAM verfügbar. Bei 62GB RAM zu aggressiv.\n\nFix: {\"immediate\": \"swapoff -a && swapon -a (nur wenn RAM < 50%)\", \"permanent\": \"echo 'vm.swappiness=10' >> /etc/sysctl.conf && sysctl vm.swappiness=10\"}\n\nPrevention: vm.swappiness=10 auf allen Servern mit >16GB RAM setzen."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[proxmox] backup-load auf 192.168.178.10: Load Average 60+ auf 22-CPU System; SSH extrem langsam; pvestatd und andere Services gehen in D-State", "output": "**Proxmox Backup verursacht extrem hohe Load — Kaskaden-Effekt** (Severity: info)\n\nRoot Cause: vzdump ohne I/O-Limit liest/schreibt massiv auf Disk. Kaskadiert mit Tunnel-Reconnect und D-State-Prozessen.\n\nFix: {\"permanent\": [\"bwlimit: 50000 in /etc/vzdump.conf\", \"ionice: 7 (idle I/O priority)\", \"Kompression: lzo statt gzip\", \"Backup-Zeiten auf Nacht verschieben\"]}\n\nPrevention: vzdump.conf: ionice: 7 und bwlimit setzen. Backups in Maintenance-Fenster."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[ctxevent] database-auth auf 82.165.222.127: Admin und Participant login: Internal server error; Fehler: SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string", "output": "**Production Login komplett kaputt — falscher DB-User in DATABASE_URL** (Severity: critical)\n\nRoot Cause: DATABASE_URL enthielt falschen PostgreSQL-User (renefichtmueller statt ctxmeet). PrismaPg/SCRAM-SHA-256 erfordert zwingend Passwort-String.\n\nFix: {\"steps\": [\"1. PostgreSQL-Rollen prüfen: sudo -u postgres psql -c '\\\\du'\", \"2. Korrekten User mit Passwort in DATABASE_URL: postgresql://ctxmeet:@localhost:5432/ctxmeet\", \"3. PM2 restart mit --update-env Flag\"]}\n\nPrevention: DATABASE_URL IMMER mit Passwort setzen. Korrekte DB-User dokumentieren."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[ctxevent] prisma-schema auf 82.165.222.127: 'prisma migrate status' zeigt 'up to date'; Spalten fehlen: twoFactorFailCount, twoFactorLockedUntil, recoveryCodesHash; Fehler: P2022: The column does not exist", "output": "**Prisma Schema Drift — migrate status sagt 'up to date' aber Spalten fehlen physisch** (Severity: critical)\n\nRoot Cause: Migrationen als 'applied' markiert, aber SQL nie korrekt ausgeführt. prisma migrate status lügt.\n\nFix: {\"steps\": [\"1. Echten DB-Stand prüfen: \\\\d 'TableName' in psql\", \"2. Force-Push Schema: npx prisma db push\", \"3. Clean rebuild: rm -rf .next && npx prisma generate && npm run build\"]}\n\nPrevention: IMMER echten DB-Stand mit \\d verifizieren, nicht nur prisma migrate status."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[ctxevent] table-ownership auf 82.165.222.127: prisma db push: permission denied for table; Tabellen gehören 'postgres' statt App-User", "output": "**PostgreSQL Table Ownership falsch — prisma db push scheitert** (Severity: high)\n\nRoot Cause: Tabellen von postgres Superuser erstellt. App-User hat keine ALTER-Rechte.\n\nFix: {\"sql\": \"DO $$ DECLARE r RECORD; BEGIN FOR r IN SELECT tablename FROM pg_tables WHERE schemaname='public' AND tableowner != 'ctxmeet' LOOP EXECUTE format('ALTER TABLE %I OWNER TO ctxmeet', r.tablename); END LOOP; END $$;\"}\n\nPrevention: Alle DB-Operationen immer als App-User, nie als postgres."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[ctxevent] pm2-env auf 82.165.222.127: Neuer .env Wert wird ignoriert; App-Verhalten passt nicht zu .env", "output": "**PM2 verwendet gecachte alte Umgebungsvariablen nach .env Änderung** (Severity: high)\n\nRoot Cause: PM2 cached Umgebungsvariablen beim ersten Start. Ohne --update-env werden Änderungen ignoriert.\n\nFix: {\"command\": \"pm2 restart --update-env\"}\n\nPrevention: IMMER --update-env bei pm2 restart verwenden."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[erik-server] sshd auf 82.165.222.127: SSH Port 22: Connection refused; sshd -t: 'no argument after keyword'", "output": "**Erik SSH komplett down — fehlerhafte sshd_config + fehlendes /run/sshd** (Severity: critical)\n\nRoot Cause: Fehlerhafte Zeile in sshd_config (Copy-Paste Unfall) + fehlender /run/sshd Ordner.\n\nFix: {\"steps\": [\"1. IONOS VNC Console nutzen (direkte noVNC URL, nicht iframe)\", \"2. Fehlerhafte Zeile entfernen: sed -i 'Nd' /etc/ssh/sshd_config\", \"3. mkdir -p /run/sshd\", \"4. sshd -t (Config testen)\", \"5. systemctl start ssh\", \"6. Permanent: echo 'd /run/sshd 0755 root root -' > /etc/tmpfiles.d/sshd.conf\"]}\n\nPrevention: IMMER sshd -t vor restart. /run/sshd in tmpfiles.d. Min. 2 SSH-Pfade zu jedem Server."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[network] cisco-stp auf 192.168.178.2: GE2 cycling LOOPBACKDET alle 30s; MAC-Tabelle flusht; 171ms interne Latenz", "output": "**Cisco SG350 STP Loop — 171ms Latenz durch FritzBox BPDU-Reflexion** (Severity: high)\n\nRoot Cause: FritzBox reflektiert BPDUs → Switch erkennt eigene BPDUs als Loop → Port deaktiviert → MAC flush.\n\nFix: {\"action\": \"spanning-tree disable auf GE2 (FritzBox Uplink)\"}\n\nPrevention: Bei Consumer-Router-Uplinks STP IMMER deaktivieren."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[network] vlan-starlink auf 192.168.178.2: 100.64.x.x Adressen im LAN; DHCP-Konflikte; Falsche Default Routes", "output": "**Starlink CGNAT flooding LAN ohne VLAN-Isolation** (Severity: high)\n\nRoot Cause: Starlink ohne VLAN sendet CGNAT DHCP ins Management-LAN.\n\nFix: {\"steps\": [\"1. VLAN anlegen: vlan 30 name Starlink-WAN (eine Zeile!)\", \"2. GE12 als Access auf VLAN 30\", \"3. STP auf GE12 deaktivieren\"], \"note\": \"Cisco SG350 VLAN Syntax: 'vlan X name Y' in EINER Zeile\"}\n\nPrevention: Starlink IMMER in dediziertes VLAN."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[network] aruba-reset auf 192.168.178.3: Kein Ping, HTTP, SSH nach Factory Reset; L2-Forwarding funktioniert aber Management nicht", "output": "**Aruba 1830 Factory Reset Falle — Switch nach Reset unerreichbar** (Severity: warning)\n\nRoot Cause: Factory Reset setzt Aruba in Cloud-Provisioning-Modus. Lokales Management erst nach Cloud-Registrierung.\n\nFix: {\"action\": \"Cloud Portal → portal.instant-on.hpe.com → Add Device → Serial\", \"warning\": \"NIE Factory Reset zur Lösung von Login-Problemen\"}\n\nPrevention: Aruba nie per Factory Reset troubleshooten."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[opnsense] config-restore auf 192.168.178.11: WAN auf falschem vtnet Interface; DHCP auf falschem Subnet; Kein Internet", "output": "**OPNsense config.xml nach blindem Revert kaputt** (Severity: critical)\n\nRoot Cause: Blinder Revert auf alte Config hat falsche Interface-Zuordnung und falsches Subnet.\n\nFix: {\"steps\": [\"1. VM stoppen\", \"2. LVM-Disk mounten (UFS2)\", \"3. config.xml.bak (letzte gute Config) als config.xml verwenden\", \"4. Interface-Zuordnungen verifizieren (vtnet0=LAN, vtnet1=WAN)\", \"5. Unmount + VM starten\"]}\n\nPrevention: VOR jedem Revert die .bak Datei inspizieren. Interfaces verifizieren."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[opnsense] boot-issues auf 192.168.178.11: LAN-Zugang fehlt nach Boot; SSH nicht erreichbar; Web UI geblockt", "output": "**OPNsense Boot-Probleme — LAN Route, SSH, pf Blocking** (Severity: high)\n\nRoot Cause: Drei Boot-Probleme: LAN-Route fehlt, SSH noauto=1, pf blockiert.\n\nFix: {\"steps\": [\"1. configctl interface reconfigure lan\", \"2. SSH: noauto=0 in config.xml\", \"3. pf: pfctl -d && configctl filter reload\"]}\n\nPrevention: SSH autostart auf noauto=0. LAN-Route in Monitoring."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[peercortex] cache-null auf 82.165.222.127: ASN-Lookup zeigt 0 Neighbours/Prefixes; Werte bleiben 15min auf 0", "output": "**Null-Cache Bug — fehlgeschlagene API-Responses 15min gecacht** (Severity: high)\n\nRoot Cause: Fehlgeschlagene RIPE Stat Responses (null) wurden gecacht.\n\nFix: {\"rule\": \"NIEMALS null-Responses cachen: if (result !== null) cache.set(key, result)\"}\n\nPrevention: Cache-Implementierung muss null/error explizit ausschließen."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[peercortex] api-timeout auf 82.165.222.127: Lookups für AS174 (Cogent) etc. geben leere Ergebnisse; Timeout nach 30s", "output": "**RIPE Stat Timeout zu kurz für Tier-1 Carrier** (Severity: high)\n\nRoot Cause: 30s Timeout zu kurz für Tier-1 mit 5000+ Neighbours.\n\nFix: {\"change\": \"Timeout von 30s auf 45s erhöhen\"}\n\nPrevention: API-Timeouts nach Worst-Case kalibrieren."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[peercortex] api-ratelimit auf 82.165.222.127: HTTP 429 Too Many Requests; Hunderte parallele Requests", "output": "**PeeringDB/RIPE Stat Rate-Limit Flood ohne Concurrency-Kontrolle** (Severity: high)\n\nRoot Cause: Kein Concurrency-Limit auf externe API-Calls.\n\nFix: {\"steps\": [\"Semaphore PeeringDB: max 5 concurrent\", \"Semaphore RIPE Stat: max 15 concurrent\", \"Retry mit Backoff bei 429\"]}\n\nPrevention: IMMER Semaphore auf externe API-Calls. Standard: 5-15."} {"instruction": "Analysiere das IT-Problem anhand der Symptome. Gib Root Cause, Severity, Fix-Steps und Prevention.", "input": "[peercortex] css-injection auf 82.165.222.127: SyntaxError im CSS-Parser; Styles nicht korrekt", "output": "**CSS SyntaxError — Multiline CSS in JavaScript-String** (Severity: warning)\n\nRoot Cause: CSS als JS-String statt in