Add: Zabbix-Probleme Pflicht-Workflow in CLAUDE.md
Neuer Abschnitt mit strukturiertem 5-Phasen-Workflow (Analyse, Klassifizieren, User-Vorlage, Abarbeitung, Rolling Documentation) für systematische Zabbix-Problemlösung. Enthält Pitfalls zu Macro-Naming, LLD-Triggern und Event-Schließung. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
79
CLAUDE.md
79
CLAUDE.md
@@ -713,6 +713,85 @@ Nutze parallele Agenten für umfangreiche Scans und rekursive Entdeckung.
|
|||||||
- Explizite User-Anweisung nur aktuelle Aufgabe zu erledigen
|
- Explizite User-Anweisung nur aktuelle Aufgabe zu erledigen
|
||||||
- User sagt explizit "nicht weiter scannen"
|
- User sagt explizit "nicht weiter scannen"
|
||||||
|
|
||||||
|
### Zabbix-Probleme beheben: Pflicht-Workflow
|
||||||
|
|
||||||
|
**BEVOR Zabbix-Probleme behoben werden, MUSS immer zuerst ein Plan erstellt und dem User vorgelegt werden.**
|
||||||
|
|
||||||
|
#### Phase A: Analyse (parallel, ohne User-Interaktion)
|
||||||
|
|
||||||
|
1. Alle offenen Probleme via API abfragen (`problem.get`)
|
||||||
|
2. Trigger-zu-Host-Mapping erstellen (`trigger.get` mit `selectHosts`)
|
||||||
|
3. Aktuelle Item-Werte prüfen (`item.get` — ist das Problem echt oder stale?)
|
||||||
|
4. Trigger-Expressions lesen (für korrekte Macro-Namen)
|
||||||
|
|
||||||
|
#### Phase B: Klassifizieren und Liste erstellen
|
||||||
|
|
||||||
|
Jedes Problem in eine Kategorie einordnen:
|
||||||
|
|
||||||
|
| Kategorie | Beschreibung | Aktion |
|
||||||
|
|-----------|-------------|--------|
|
||||||
|
| **STALE** | Trigger disabled, Event offen | `manual_close` setzen + Event schließen |
|
||||||
|
| **THRESHOLD** | Wert normal, Schwellwert zu niedrig | Host-Macro erstellen/anpassen |
|
||||||
|
| **ECHT** | Tatsächliches Problem | SSH-Intervention oder manuelle Aktion |
|
||||||
|
| **TEMPLATE-NOISE** | Trigger passt nicht zum Host-Typ | Trigger disablen oder Macro-Filter |
|
||||||
|
|
||||||
|
#### Phase C: Nummerierte Liste dem User vorlegen
|
||||||
|
|
||||||
|
**PFLICHT:** Dem User eine nummerierte, nach Priorität sortierte Liste präsentieren:
|
||||||
|
|
||||||
|
```
|
||||||
|
# | Host | Problem | Kategorie | Geplante Aktion
|
||||||
|
1 | srvhost04 | Disk 95% | ECHT | SSH: Cleanup LXC 101
|
||||||
|
2 | srvdocker02 | Agent down | ECHT | SSH: Service starten
|
||||||
|
3 | gw-st01 | /mnt/share_new | STALE | API: FS-Macro + Event schließen
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Der User entscheidet:
|
||||||
|
- Welche Punkte bearbeitet werden
|
||||||
|
- In welcher Reihenfolge
|
||||||
|
- Ob SSH-Aktionen gewünscht sind
|
||||||
|
|
||||||
|
#### Phase D: Punkt für Punkt abarbeiten
|
||||||
|
|
||||||
|
- Nur nach User-Freigabe ausführen
|
||||||
|
- Parallele Agenten für unabhängige API-Fixes
|
||||||
|
- Nach jedem Punkt: Ergebnis melden
|
||||||
|
- Ergebnis-Verifikation via `problem.get`
|
||||||
|
|
||||||
|
#### Phase E: Rolling Documentation aktualisieren (PFLICHT)
|
||||||
|
|
||||||
|
Nach JEDER Zabbix-Problem-Session:
|
||||||
|
|
||||||
|
1. **Host-Dateien aktualisieren** (`infrastructure/hosts/[host].md`):
|
||||||
|
- Abschnitt "Wiederkehrende Probleme" anlegen/ergänzen
|
||||||
|
- Datum, Problem, Lösung, ob wiederkehrend
|
||||||
|
- Beispiel:
|
||||||
|
```markdown
|
||||||
|
## Wiederkehrende Probleme
|
||||||
|
|
||||||
|
| Datum | Problem | Lösung | Wiederkehrend |
|
||||||
|
|-------|---------|--------|---------------|
|
||||||
|
| 2026-01-29 | Memory >90% | Macro {$MEMORY.UTIL.MAX}=95 | Ja (normal für Workload) |
|
||||||
|
| 2026-01-29 | Swap <50% free | Macro {$SWAP.PFREE.MIN.WARN}=10 | Ja (normal) |
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Zabbix `copilot-instructions.md` aktualisieren**:
|
||||||
|
- Neue Pitfalls dokumentieren
|
||||||
|
- Macro-Namen-Korrekturen festhalten
|
||||||
|
- Patterns für zukünftige Problemlösung
|
||||||
|
|
||||||
|
3. **`dependencies.md` prüfen** — Falls neue Abhängigkeiten entdeckt
|
||||||
|
|
||||||
|
#### Wichtige Pitfalls
|
||||||
|
|
||||||
|
- **Macro-Namen exakt prüfen!** Trigger-Expression lesen, nicht raten.
|
||||||
|
Beispiel: `{$PVE.MEMORY.PUSE.MAX.WARN}` ≠ `{$PVE.MEM.PUSE.MAX.WARN}`
|
||||||
|
- **LLD-Trigger:** Discovered Triggers können nicht direkt `manual_close` gesetzt werden.
|
||||||
|
Stattdessen: Template Trigger-Prototyp updaten → LLD re-run (`task.create` type 6)
|
||||||
|
- **Event schließen:** Erst `manual_close=1` auf Trigger setzen, dann `event.acknowledge` action=1
|
||||||
|
- **curl | jq kann leere Ausgabe liefern:** Immer erst in Datei speichern, dann lesen
|
||||||
|
|
||||||
### Skills-Referenz
|
### Skills-Referenz
|
||||||
|
|
||||||
| Skill | Zweck |
|
| Skill | Zweck |
|
||||||
|
|||||||
Reference in New Issue
Block a user