Zabbix: So erhalten Sie Daten aus PowerShell-Skripten

Admin

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.

Zuvor haben wir Ihnen die Verwendung gezeigt Benutzerparameter um ein Bash-Skript auszuführen Zabbix, um das Ablaufdatum einer Domain zu überprüfen.

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

Sie können sich auch darüber informieren aktive RDS-Verbindungen aus den Protokollen der Ereignisanzeige.

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
Der -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
PowerShell-Code läuft normalerweise recht langsam. Daher müssen Sie das Timeout in der Agentenkonfiguration von standardmäßig 3 Sekunden auf 20 Sekunden erhöhen (eingestellt). Zeitüberschreitung=20), andernfalls gibt Zabbix beim Empfang von Daten aus einem Skript einen Fehler zurück:
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

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.

Konfigurieren Sie Netzwerkeinstellungen unter Windows mit PowerShell: IP-Adresse, DNS, Standard-Gateway, statische Routen
Konfigurieren Sie Netzwerkeinstellungen unter Windows mit PowerShell: IP-Adresse, DNS, Standard-Gateway, statische Routen

Unter Windows können Sie die Einstellungen für Ihre Netzwerkadapter nicht nur über die GUI, sonde...

Konfigurieren von Windows-Firewallregeln mit PowerShell
Konfigurieren von Windows-Firewallregeln mit PowerShell

Dieser Artikel enthält die Grundlagen zum Verwalten von Einstellungen und Regeln der integrierten...

Verwenden von Out-GridView zum Anzeigen und Auswählen von Tabellendaten in PowerShell
Verwenden von Out-GridView zum Anzeigen und Auswählen von Tabellendaten in PowerShell

Der Out-GridView Das Cmdlet ermöglicht die Anzeige von Daten als interaktive grafische Tabelle, d...