# VINOS Zabbix Server (srv-monitor02) - Copilot Instructions ## Inhaltsverzeichnis 1. [Mandatory Rules](#mandatory-rules) 2. [System Overview](#system-overview) 3. [Quick Reference](#quick-reference) 4. [API-Zugriff](#api-zugriff) 5. [Bekannte Hosts](#bekannte-hosts) 6. [Netzlaufwerk-Pfade](#netzlaufwerk-pfade) 7. [Troubleshooting-Checklisten](#troubleshooting-checklisten) 8. [Bekannte Probleme & Lösungen](#bekannte-probleme--lösungen) 9. [Notification-System](#notification-system-tags) 10. [SSH-Befehle Sammlung](#ssh-befehle-sammlung) 11. [Pitfalls](#pitfalls) --- ## MANDATORY RULES - **API-Schlüssel:** Liegt in `api.txt` (NICHT committen!) - **Zabbix Version:** 7.0.3 (API-Syntax beachten - 7.x hat geänderte Parameter) - Authentifizierung per Bearer Token im Authorization Header - Bei `trigger.update` mit `tags`: **ALLE existierenden Tags mit angeben**, sonst werden sie überschrieben! --- ## System Overview | Eigenschaft | Wert | |-------------|------| | **Server** | srv-monitor02 | | **URL** | https://srv-monitor02/ | | **API Endpoint** | https://srv-monitor02/api_jsonrpc.php | | **Zabbix Version** | 7.0.3 | | **Kunde** | VINOS | --- ## Quick Reference ### API-Methoden Schnellübersicht | Aufgabe | Methode | Wichtige Parameter | |---------|---------|-------------------| | Aktuelle Probleme | `problem.get` | `recent: true` | | Problem → Host | `trigger.get` | `triggerids: [X], selectHosts` | | Alle feuernden Trigger | `trigger.get` | `only_true: true, active: true` | | Host suchen | `host.get` | `search: {name: "..."}` | | Items eines Hosts | `item.get` | `hostids: [X]` | | Trigger aktivieren/deaktivieren | `trigger.update` | `triggerid, status` | | Tag hinzufügen | `trigger.update` | `triggerid, tags: [...]` | ### Host-ID Schnellreferenz | Host | HostID | Typ | |------|--------|-----| | SRV-DB12 REMA Datenbank | 10786 | MSSQL | | SRV-JOB01 | 10636 | Windows/Tasks | ### Wichtige Trigger-IDs | TriggerID | Name | Host | Kategorie | |-----------|------|------|-----------| | 44829 | processing_backup_monitoring_hours_crif | SRV-JOB01 | Interface/CRIF | | 47905 | MSSQL Job 'Backup_tgl.Subplan_1' | SRV-DB12 | Datenbank | | 47907 | MSSQL Job 'Backup_Log.Subplan_1' | SRV-DB12 | Datenbank | --- ## API-Zugriff ### Authentifizierung (Zabbix 7.x) ```bash curl -sk -X POST "https://srv-monitor02/api_jsonrpc.php" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ -d '{ "jsonrpc": "2.0", "method": "problem.get", "params": { ... }, "id": 1 }' ``` ### Wichtige API-Änderungen in 7.x - `selectHosts` bei `problem.get` nicht mehr unterstützt - `apiinfo.version` OHNE Authorization Header aufrufen ### Nützliche Abfragen **Alle feuernden Trigger MIT Host-Informationen (Einschritt-Abfrage):** ```json { "method": "trigger.get", "params": { "output": ["triggerid", "description", "priority", "lastchange"], "only_true": true, "active": true, "expandDescription": true, "selectHosts": ["hostid", "host", "name"], "selectItems": ["itemid", "name", "key_", "lastvalue"], "selectTags": "extend", "sortfield": "lastchange", "sortorder": "DESC", "limit": 30 } } ``` *Dies zeigt alle aktuell feuernden Trigger direkt mit Host-Namen - effizienter als problem.get + trigger.get!* **Aktuelle Probleme (nur IDs):** ```json { "method": "problem.get", "params": { "output": "extend", "recent": true, "sortfield": ["eventid"], "sortorder": "DESC", "limit": 30 } } ``` *Hinweis: `objectid` im Result = Trigger-ID* **Trigger-Details mit Host:** ```json { "method": "trigger.get", "params": { "output": "extend", "triggerids": [""], "expandDescription": true, "selectHosts": ["hostid", "host", "name"], "selectItems": ["itemid", "name", "key_", "lastvalue"], "selectTags": "extend" } } ``` **Host-ID ermitteln:** ```json { "method": "host.get", "params": { "output": ["hostid", "host", "name"], "search": {"name": "SRV-JOB"} } } ``` **Items eines Hosts abfragen:** ```json { "method": "item.get", "params": { "output": ["itemid", "name", "key_", "lastvalue", "lastclock"], "hostids": [""], "search": { "key_": "suchbegriff" } } } ``` --- ## Bekannte Hosts | Host | HostID | Typ | Beschreibung | SSH-Zugang | |------|--------|-----|--------------|------------| | SRV-DB12 REMA Datenbank | 10786 | MSSQL | Wartungspläne, Backups | - | | SRV-JOB01 | 10636 | Windows | Scheduled Tasks, WinSCP, CRIF | `vinos\rwi@srv-job01` | ### Windows Zabbix Agent Pfade | Server | Agent Version | Config-Pfad | |--------|---------------|-------------| | SRV-JOB01 | Agent 2 | `C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf` | | Standard Win | Agent 2 | `C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf` | | Standard Win | Agent 1 | `C:\Program Files\Zabbix Agent\zabbix_agentd.conf` | **UserParameter finden:** ```powershell Get-Content "C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf" | Select-String "UserParameter" ``` ### Wichtige Item-Keys (UserParameters) | Item Key | Host | Bedeutung | Return | |----------|------|-----------|--------| | `processing_backup_monitoring_hours_crif` | SRV-JOB01 | CRIF Backup-Alter | 0=OK, 1=Fehler (keine Datei <1 Tag) | | `processing_import_monitoring_crif` | SRV-JOB01 | CRIF Import Status | 0=OK, 1=Fehler | | `mssql.job.runstatus[*]` | DB-Server | SQL Job Status | 0=Fehler, 1=OK | | `mssql.job.lastrunstatusmessage[*]` | DB-Server | SQL Job Fehlermeldung | Text | --- ## Netzlaufwerk-Pfade ### NAV-Schnittstellen | UNC-Pfad | Zweck | |----------|-------| | `\\vinos.local\sys\nav\interfaces\` | Alle NAV-Schnittstellen (Root) | | `\\vinos.local\sys\nav\interfaces\CRIFBuergel\` | CRIF Bürgel Export | | `\\vinos.local\sys\nav\interfaces\CRIFBuergel\exp\` | Pending Exports (NAV legt hier ab) | | `\\vinos.local\sys\nav\interfaces\CRIFBuergel\backup\` | Erfolgreiche Exports (nach Upload) | | `\\vinos.local\sys\nav\interfaces\CRIFBuergel\log\` | WinSCP Transfer-Logs | | `\\vinos.local\sys\nav\interfaces\HVB\` | HVB Schnittstelle | ### Externe Systeme | System | Host | Port | Pfad | Zweck | |--------|------|------|------|-------| | CRIF Bürgel | ftp.crif.de | 22 (SFTP) | /in/WeinVinos/ | Export-Upload | --- ## Troubleshooting-Checklisten ### MSSQL Job schlägt fehl 1. [ ] Zabbix-Problem analysieren (`objectid` = Trigger-ID) 2. [ ] `mssql.job.lastrunstatusmessage` Item prüfen für Fehlermeldung 3. [ ] Fehlercode recherchieren: - `0x534` = Account nicht im AD auflösbar → Job-Besitzer ändern 4. [ ] Job-Besitzer in SSMS prüfen: SQL Server Agent → Jobs → Properties 5. [ ] Job-History in SSMS prüfen 6. [ ] Nach Fix: **Manuell Job starten** zum Verifizieren (Rechtsklick → Start Job) 7. [ ] Zabbix-Problem sollte sich automatisch schließen nach erfolgreichem Lauf ### Scheduled Task schlägt fehl (Windows) ```bash # 1. Task-Status prüfen ssh 'vinos\rwi@srv-job01' "Get-ScheduledTask -TaskName 'TASKNAME' | Select-Object TaskName, State" # 2. Letzte Ausführung und Result ssh 'vinos\rwi@srv-job01' "Get-ScheduledTaskInfo -TaskName 'TASKNAME' | Select-Object LastRunTime, LastTaskResult, NextRunTime" # 3. Task manuell starten ssh 'vinos\rwi@srv-job01' "Start-ScheduledTask -TaskName 'TASKNAME'" ``` **LastTaskResult Codes:** - `0` = Erfolg - `1` = Fehler (allgemein) - `267009` = Task läuft noch ### Interface-Export fehlt (CRIF, HVB, etc.) 1. [ ] **Export-Ordner prüfen:** Dateien vorhanden? ```bash ssh 'vinos\rwi@srv-job01' "Get-ChildItem '\\vinos.local\sys\nav\interfaces\CRIFBuergel\exp'" ``` 2. [ ] **Backup-Ordner prüfen:** Wann war letzte erfolgreiche Datei? ```bash ssh 'vinos\rwi@srv-job01' "Get-ChildItem '\\vinos.local\sys\nav\interfaces\CRIFBuergel\backup' | Sort-Object LastWriteTime -Descending | Select-Object -First 5 Name, LastWriteTime" ``` 3. [ ] **NAV Aufgabenwarteschlange prüfen** (häufigste Ursache!) 4. [ ] **WinSCP/Transfer-Log prüfen:** ```bash ssh 'vinos\rwi@srv-job01' "Get-Content '\\vinos.local\sys\nav\interfaces\CRIFBuergel\log\2026-01_Transfer-FilesWinSCP.log' | Select-Object -Last 30" ``` 5. [ ] **SFTP-Verbindung manuell testen** (Config: `C:\Tasks\crifbuergel\CRIF-config.xml`) ### Zabbix-Problem bleibt nach Fix offen 1. [ ] Item-Wert prüfen - hat sich der `lastvalue` geändert? 2. [ ] `lastclock` prüfen - wann wurde zuletzt abgefragt? 3. [ ] Problem-Status prüfen: `r_eventid` vorhanden = resolved 4. [ ] Bei Item-Type "Active": Warten auf nächsten Agent-Push 5. [ ] Seite refreshen (F5) - UI-Cache --- ## Bekannte Probleme & Lösungen ### MSSQL Job-Fehler: Fehlercode 0x534 (Fehler 15404) **Symptom:** ``` Auftragsfehler: Es kann nicht bestimmt werden, ob der Besitzer ('VINOS\username') von Auftrag 'Jobname' Serverzugriff aufweist. (Ursache: Die Informationen über Windows NT-Gruppe oder -Benutzer "VINOS\username" konnten nicht abgerufen werden, Fehlercode 0x534. [SQLSTATE 42000] (Fehler 15404)) ``` **Ursache:** SQL Server kann Job-Besitzer nicht im AD auflösen (User gelöscht/deaktiviert). **Lösung - Job-Besitzer auf `sa` ändern:** ```sql USE msdb; GO EXEC dbo.sp_update_job @job_name = N'Backup_tgl.Subplan_1', @owner_login_name = N'sa'; GO ``` **Oder via SSMS:** Job Properties → General → Owner → `sa` **Nach Fix:** Manuell Job starten, Zabbix-Problem schließt automatisch. ### CRIF Bürgel Export-Monitoring (`processing_backup_monitoring_hours_crif`) **Trigger:** Prüft ob in `\\vinos.local\sys\nav\interfaces\CRIFBuergel\backup` Dateien jünger als 1 Tag sind. **Ablauf des CRIF-Exports:** 1. **NAV/Business Central** erstellt `CL_*.dat.zip` in `\CRIFBuergel\exp\` 2. **Scheduled Task** `Transfer-FilesWinSCP` (SRV-JOB01, 02:00) lädt zu `ftp.crif.de` hoch 3. Nach Upload: Dateien werden nach `\CRIFBuergel\backup\` verschoben **Häufigste Ursache:** NAV Aufgabenwarteschlange läuft nicht! **CRIF FTP-Server Struktur:** - `/in/WeinVinos/` - Upload-Ziel für Exports - `/out/` - leer (keine Downloads) --- ## Notification-System (Tags) Zabbix Actions filtern nach **Tags** auf Triggern. | Tag | Ziel | |-----|------| | `Meldung_Webhook_VAE-Meldungen` | MS Teams VAE-Kanal | | `Meldung_Webhook_IFS-Meldungen` | MS Teams IFS-Kanal | | `Meldung_Webhook_ECOM-Meldungen` | MS Teams ECOM-Kanal | | `Meldung_Mail_Bereitschaft` | bereitschaft.it@vinos.de | | `Meldung_Mail_BI` | BI-Team | | `Meldung_Mail_HM` | HM_Monitoring@vinos.de | | `Meldung_Mail_HM_Mo-Fr_9-1730` | HM nur Werktags 9-17:30 | | `Meldung_RM_Monitoring` | RM_Monitoring@vinos.de | | `Meldung_Mail_Viki` | viki@vinos.de | **Tag zu Trigger hinzufügen (API):** ```json { "method": "trigger.update", "params": { "triggerid": "", "tags": [ {"tag": "existing_tag", "value": ""}, {"tag": "Meldung_Webhook_VAE-Meldungen", "value": ""} ] } } ``` **WICHTIG:** Alle existierenden Tags müssen mit angegeben werden! **Aktuelle Tags eines Triggers abfragen:** ```json { "method": "trigger.get", "params": { "triggerids": [""], "selectTags": "extend" } } ``` --- ## SSH-Befehle Sammlung (SRV-JOB01) ### Scheduled Tasks ```bash # Alle aktiven Tasks auflisten ssh 'vinos\rwi@srv-job01' "Get-ScheduledTask | Where-Object {\$_.State -ne 'Disabled'} | Select-Object TaskName, State, TaskPath | Format-Table -AutoSize" # Task-Details mit letzter Ausführung ssh 'vinos\rwi@srv-job01' "Get-ScheduledTaskInfo -TaskName 'Transfer-FilesWinSCP' -TaskPath '\Crifbürgel\'" # Task manuell starten ssh 'vinos\rwi@srv-job01' "Start-ScheduledTask -TaskName 'Transfer-FilesWinSCP' -TaskPath '\Crifbürgel\'" # Task-Actions anzeigen (was wird ausgeführt) ssh 'vinos\rwi@srv-job01' "(Get-ScheduledTask -TaskName 'Transfer-FilesWinSCP').Actions | Select-Object Execute, Arguments" ``` ### Dateien und Ordner ```bash # Dateien auflisten mit Datum ssh 'vinos\rwi@srv-job01' "Get-ChildItem '\\vinos.local\sys\nav\interfaces\CRIFBuergel\backup' | Sort-Object LastWriteTime -Descending | Select-Object -First 10 Name, LastWriteTime, Length" # Prüfen ob Ordner leer ist ssh 'vinos\rwi@srv-job01' "if ((Get-ChildItem 'PFAD' | Measure-Object).Count -eq 0) { 'LEER' } else { 'Dateien vorhanden' }" # Log-Datei lesen (letzte 30 Zeilen) ssh 'vinos\rwi@srv-job01' "Get-Content 'LOGPFAD' | Select-Object -Last 30" ``` ### Zabbix Agent ```bash # Agent-Config lesen ssh 'vinos\rwi@srv-job01' "Get-Content 'C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf'" # UserParameter finden ssh 'vinos\rwi@srv-job01' "Get-Content 'C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf' | Select-String 'UserParameter'" # Agent-Service Status ssh 'vinos\rwi@srv-job01' "Get-Service *zabbix* | Select-Object Name, Status, StartType" ``` --- ## Scheduled Tasks Inventar (SRV-JOB01) | Task Name | TaskPath | Zeitplan | Zweck | |-----------|----------|----------|-------| | Transfer-FilesWinSCP | \Crifbürgel\ | 02:00 täglich | CRIF Export Upload zu ftp.crif.de | | Remove-Oldfiles.ps1 | \Crifbürgel\ | 18:00 täglich | Alte CRIF-Backups löschen (>30 Tage) | --- ## Pitfalls - **API-Version:** Zabbix 7.x hat Breaking Changes gegenüber 6.x - **SSL-Zertifikat:** `-sk` Flag bei curl verwenden (self-signed cert) - **Timestamps:** Zabbix liefert Unix-Timestamps, konvertieren mit `date -d @TIMESTAMP` - **Tags überschreiben:** Bei `trigger.update` immer ALLE Tags angeben - **PowerShell Escaping:** Bei SSH zu Windows auf `$` und Quotes achten (`\$` verwenden) - **Active Items:** Wert aktualisiert sich erst beim nächsten Agent-Push, nicht sofort