Wie man mit Zabbix Daten aus PowerShell-Skripten abruft

So konfigurieren Sie den Zabbix-Agenten zum Abrufen von Daten aus PowerShell-Skripten

Zabbix mit PowerShell zur Überwachung von Windows-Systemen zu nutzen, ist nicht ganz einfach, insbesondere wenn man die Standardeinstellungen gewohnt ist. Manchmal benötigt man benutzerdefinierte Metriken – wie die Anzahl aktiver RDP-Sitzungen oder die Anzahl der Tage seit dem letzten Windows-Update – und PowerShell-Skripte sind dafür ideal. Doch einfach ein Skript einzufügen, reicht nicht aus; der Zabbix-Agent muss korrekt konfiguriert werden. Diese Anleitung dient als praktische Checkliste, um die Skripte reibungslos an Zabbix zu übermitteln – inklusive einiger Fallstricke. Sie lernen Grundlagen wie das Bearbeiten von Konfigurationsdateien, das Neustarten von Diensten und das Ausführen von Befehlen zum Testen kennen. Das Hauptziel? Sicherstellen, dass der Agent Ihre Skripte ausführen, Daten erfassen und diese ohne Abstürze oder Timeouts zurücksenden kann. Es erfordert etwas Geduld und Ausprobieren, insbesondere bei Ausführungsrichtlinien und Timeouts. Doch sobald alles funktioniert, werden Sie sich fragen, warum Sie das nicht schon früher gemacht haben.

So beheben Sie Probleme mit der PowerShell-Überwachung unter Windows mithilfe des Zabbix-Agenten

Methode 1: Ausführen eines PowerShell-Skripts mithilfe von Benutzerparametern

Das ist die klassische Methode. Sie erstellen ein Skript, das Ihren Wert (z. B.RDP-Sitzungen) ausgibt, speichern es an einem sicheren Ort und weisen Zabbix an, es aufzurufen. Warum ist das nützlich? Weil Sie so benutzerdefinierte PowerShell-Code-Snippets schreiben und diese nach Bedarf ausführen können. Bei korrekter Einrichtung ruft Zabbix die Daten in regelmäßigen Abständen ab, und Sie erhalten ein übersichtliches Diagramm oder eine Warnung, falls etwas Ungewöhnliches auftritt.– Erstellen Sie zunächst Ihr Skript. Zum Beispiel ein Skript, das aktive RDP-Sitzungen zählt: `powershell $RDSsessions = qwinsta | ForEach-Object { $_ -replace „\s{2, 18}“, „, “ } | ConvertFrom-Csv $activeSessions = $RDSsessions | Where-Object { $_. State -eq ‚Active‘ } | Measure-Object |` Select-Object -ExpandProperty Count Write-Host $activeSessions – Speichern Sie die Datei unter `C:\Program Files\Zabbix Agent 2\Script\GetActiveRDPSessionCount.ps1`.- Bearbeiten Sie nun Ihre `zabbix_agent2.conf` (diese befindet sich normalerweise in `Fügen Sie in Ihrer `zabbix_agent2.conf` die folgende Zeile hinzu: `ini UserParameter=ActiveRDSSessions, powershell -NoProfile -ExecutionPolicy bypass -File „C:\Program Files\Zabbix Agent 2\Script\GetActiveRDPSessionCount.ps1″`.Starten Sie anschließend den Zabbix-Agent-Dienst neu. Dies können Sie über PowerShell tun: `powershell Get-Service ‚Zabbix Agent 2‘ | Restart-Service -Force`.Um zu überprüfen, ob die Änderung funktioniert, führen Sie folgenden Befehl aus: `bash zabbix_get -s 127.0.0.1 -p 10050 -k ActiveRDSSessions`.Wenn eine Zahl zurückgegeben wird, ist alles in Ordnung. Beachten Sie jedoch Folgendes: PowerShell-Skripte können langsam sein. Wenn Ihr Skript komplex ist, sollten Sie das Timeout in `zabbix_agent2.conf` erhöhen: `ini Timeout=20`.Der Standardwert von 3 Sekunden ist oft nicht ausreichend. Außerdem können Verbindungsfehler wie „Verbindung erzwungen geschlossen“ auftreten. Um dies zu verhindern, stellen Sie sicher, dass` erlaubt Verbindungen von localhost: ini Server=192.168.10.100, 127.0.0.1 Sobald der Befehl funktioniert, gehen Sie in Ihr Zabbix-Frontend und erstellen Sie ein neues Element: – Name: Anzahl aktiver RDS-Sitzungen – Typ: Zabbix-Agent (aktiv) – Schlüssel: ActiveRDSSessions – Datentyp: Numerisch (vorzeichenlos) – Aktualisierungsintervall: 1 Minute (ja, jede Minute) – Und legen Sie die entsprechenden Historien- und Trendzeiträume fest.Überprüfen Sie in `->` falls die Daten angezeigt werden.

Methode 2: Verwendung von system.run zur sofortigen Befehlsausführung

Wenn Sie mehr Flexibilität wünschen oder eine weniger sichere Konfiguration in Kauf nehmen, können Sie Befehle direkt von Zabbix über `system.run` ausführen. Das vereinfacht die Arbeit, aber Vorsicht: Sie führen beliebige Befehle aus, daher ist die Sicherheit eher gering.– Aktivieren Sie dies zunächst in der Datei `zabbix_agent2.conf`: ini AllowKey=system.run[*] – Fügen Sie nun einen Eintrag hinzu: – Name: Tage seit dem letzten Windows-Update – Typ: Zabbix-Agent – ​​Schlüssel: system.run[powershell.exe -NoProfile -ExecutionPolicy Bypass -Command „(New-Timespan -Start ((Get-HotFix | Sort-Object -Property InstalledOn | Select-Object -Last 1).InstalledOn) -End (Get-Date)).Days“] – Datentyp: Numerisch (vorzeichenlos) – Aktualisierungsintervall: 1 Tag – Passen Sie die Zeiträume für Verlauf und Trend entsprechend an. Dieser Befehl ruft das Datum des letzten Windows-Hotfixes ab und berechnet die seitdem verstrichenen Tage. Nicht perfekt, da es ein oder zwei Sekunden dauern kann, bis es ausgeführt wird, aber es funktioniert im Notfall.Hinweis: Bei manchen Konfigurationen können Fehler wie „Timeout“ oder „Verbindung zurückgesetzt“ auftreten. Beheben Sie diese, indem Sie sicherstellen, dass `Timeout=20` eingestellt ist und der Agent lokale Verbindungen akzeptieren kann. Gehen Sie anschließend zu `->und prüfen Sie, ob Ihr neues Element korrekte Werte meldet.

Ehrlich gesagt, ist die Konfiguration der PowerShell-Überwachung nicht immer ganz einfach – manchmal treten Fehler auf, die erst nach einigen Anpassungen der Konfigurationen verständlich werden. Sobald man den Dreh aber raus hat, erhält man viele flexible Daten von den Windows-Servern in Zabbix.

Zusammenfassung

  • Erstellen Sie das PowerShell-Skript und legen Sie es in einem dafür vorgesehenen Ordner ab.
  • Bearbeiten Sie die Datei `zabbix_agent2.conf`, um Benutzerparameter hinzuzufügen oder `system.run` zu aktivieren.
  • Starten Sie den Zabbix-Agenten neu und testen Sie ihn mit `zabbix_get`.
  • Passen Sie die Timeout-Einstellungen gegebenenfalls an.
  • Richten Sie Ihre Zabbix-Elemente so ein, dass sie diese Daten regelmäßig abrufen.

Zusammenfassung

Das Einbinden eigener PowerShell-Skripte in Zabbix erfordert etwas Geduld, ist aber kein Hexenwerk – es ist lediglich eine Kombination aus Konfigurationsbearbeitung, Skripterstellung und Tests. Bei manchen Konfigurationen sind mehrere Versuche nötig, insbesondere bei Timeouts und Berechtigungen. Sobald es aber klappt, läuft alles. Hoffentlich spart das jemandem ein paar Stunden. Viel Erfolg beim Optimieren der Skripte und beim Monitoring!