In diesem Artikel befassen wir uns mit der Konfiguration des Zabbix-Agenten zum Abrufen von Überwachungsdaten aus PowerShell-Skripten. Schauen wir uns zwei PowerShell-Skripte an, um einige Daten in Zabbix zu übertragen. Der erste gibt die Anzahl der aktiven RDP-Benutzersitzungen auf einem Windows-RDS-Server zurück und der zweite gibt die Anzahl der Tage seit der letzten Installation von Windows-Updates auf dem Server zurück.
Der Zabbix-Agent verfügt über zwei Funktionen zum Datenabruf aus einem externen PowerShell-Skript:
- Der Benutzerparameter Mit der Option in der Konfigurationsdatei des Agenten können Sie PowerShell-Code ausführen. Wenn Sie diese Option verwenden, müssen Sie die Option UserParameter aktivieren und die PS1-Skriptdatei auf jeden Windows-Host kopieren.
- Sie können PowerShell-Skripte mit ausführen system.run. Dadurch können Sie das PowerShell-Skript direkt in der Zabbix-Weboberfläche angeben und beliebige Befehle ausführen.
Beginnen wir mit einem Beispiel für die Ausführung eines PowerShell-Skripts mit UserParameter. Angenommen, Sie haben bereits einen Zabbix-Agenten auf Ihrem Windows-Computer installiert und konfiguriert.
Erstellen Sie ein einfaches PowerShell-Skript, das die Anzahl der aktiven RDP-Sitzungen zurückgibt, und speichern Sie es in einer Datei: C:\Programme\Zabbix Agent 2\Script\GetActiveRDPSessionCount.ps1
$RDSsessions= qwinsta |ForEach-Object {$_ -replace "\s{2,18}",","} | ConvertFrom-Csv
$RDSActiveSessions=@($RDSsessions| where State -eq 'Active').count
Write-Host $RDSActiveSessions
Bearbeiten Sie nun die Konfigurationsdatei des Zabbix-Agenten (zabbix_agent2.conf) und fügen Sie die Option hinzu:
UserParameter=ActiveRDSSessions, powershell -NoProfile -ExecutionPolicy bypass -File "C:\Program Files\Zabbix Agent 2\Script\GetActiveRDPSessionCount.ps1"
![Aktivieren Sie den UserParameter-Parameter mit dem PowerShell-Skript im Zabbix-Agenten](/f/46a9a2034f679ba414c92151d20026a2.png)
-ExecutionPolicy bypass
Mit dem Parameter können Sie ein PowerShell-Skript ausführen, ohne das zu ändern Einstellungen der PowerShell-Ausführungsrichtlinie.Starten Sie den Zabbix Agent-Dienst neu:
Get-Service 'Zabbix Agent 2'| Restart-Service -force
Stellen Sie sicher, dass der Zabbix-Agent die Daten vom neuen Parameter empfangen kann. Nutzen Sie die integrierte zabbix-get Befehlszeilentool zum Testen des Agenten:
zabbix_get -s 127.0.0.1 -p 10050 -k ActiveRDSSessions
In diesem Beispiel hat Zabbix ein PowerShell-Skript ausgeführt und zurückgegeben, dass auf dem Host zwei RDP-Benutzersitzungen aktiv sind.
![zabbix_get: Daten von UserParameter abrufen](/f/f14fe088a9afd040501bf58e48599584.png)
ZBX_NOTSUPPORTED: Timeout while executing a shell script.
Beim Ausführen des Befehls wird ein weiterer Fehler angezeigt:
zabbix_get [4292]: Get value error: ZBX_TCP_READ() failed: [0x00002746] An existing connection was forcibly closed by the remote host. zabbix_get [4292]: Check access restrictions in Zabbix agent configuration.
Wenn ja, erlauben Sie die Annahme lokaler Verbindungen in der Agent-Konfigurationsdatei (zabbix_agent2.conf). Fügen Sie die Adresse 127.0.0.1 hinzu.
Server=192.168.10.100,127.0.0.1
Anschließend können Sie Ihrer Vorlage einen neuen Parameter hinzufügen. Gehe zum Artikel Tab und legen Sie fest:
- Name: Anzahl der aktiven RDS-Sitzungen
- Typ: Zabbix-Agent (aktiv)
- Schlüssel: ActiveRDSSessions
- Art der Informationen: Numerisch (ohne Vorzeichen)
- Updateintervall: 1m
- Speicherdauer des Verlaufs: 90d
- Speicherdauer des Trends: 365d
![Erstellen Sie ein PowerShell-Skript in der Zabbix-Vorlage](/f/6f5a0f74a0f12ffc13bcd010c7b4e571.png)
Gehe zu Überwachung -> Neueste Daten und prüfen Sie, ob Zabbix jetzt den Wert vom PowerShell-Skript erhält.
Lassen Sie uns nun die Ausführung von PowerShell-Skripten zulassen system.run. Diese Methode ist weniger sicher, da Sie über Zabbix jeden Befehl auf dem Remote-Host ausführen können. Es ist jedoch praktisch, da es die Konfiguration von PowerShell-Skripten direkt über die Zabbix-Weboberfläche ermöglicht.
Aktivieren Sie den folgenden Parameter in der Konfigurationsdatei des Agenten:
AllowKey=system.run[*]
Erstellen Sie dann ein neues Zabbix Artikel:
- Name: Tage seit der letzten Windows Update-Installation
- Typ: Zabbix-Agent
- Schlüssel:
system.run[powershell.exe -command "(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).days"]
- Art der Informationen: Numerisch (ohne Vorzeichen)
- Updateintervall: 1d
- Geschichte: 180d
- Trenfd: 365d
Dieser Befehl gibt die Anzahl der Tage seit der letzten Installation eines Sicherheitsupdates unter Windows zurück.
Deshalb haben wir uns angeschaut, wie Sie Daten aus PowerShell-Skripten, die unter Windows ausgeführt werden, in Zabbix übertragen können.