Zabbix: Sådan får du data fra PowerShell-scripts

I denne artikel vil vi se på konfiguration af Zabbix Agent til at hente overvågningsdata fra PowerShell-scripts. Lad os se på to PowerShell-scripts for at få nogle data ind i Zabbix. Den første returnerer antallet af aktive RDP-brugersessioner på en Windows RDS-server, og den anden returnerer antallet af dage, siden Windows-opdateringer sidst blev installeret på serveren.

Zabbix-agenten har to funktioner til datahentning fra et eksternt PowerShell-script:

  • DeBrugerparametermulighed i agentens konfigurationsfil giver dig mulighed for at udføre PowerShell-kode. Hvis du bruger denne mulighed, skal du aktivere indstillingen UserParameter og kopiere PS1-scriptfilen til hver Windows-vært.
  • Du kan køre PowerShell-scripts ved hjælp afsystem.run. Dette giver dig mulighed for at angive PowerShell-scriptet direkte i Zabbix-webgrænsefladen og kan køre vilkårlige kommandoer.

Lad os starte med et eksempel på at køre et PowerShell-script ved hjælp af UserParameter. Antag, at du allerede har en Zabbix-agent installeret og konfigureret på din Windows-computer.

Tidligere viste vi dig, hvordan du bruger UserParameter til at køre et bash-script i Zabbix for at kontrollere et domænes udløbsdato.

Få flere oplysninger:Overvågning af webstedets SSL/TLS-certifikatudløb med Zabbix

Opret et simpelt PowerShell-script, der returnerer antallet af aktive RDP-sessioner, og gem det i en fil: C:Program FilesZabbix Agent 2ScriptGetActiveRDPSessionCount.ps1

$RDSsessions= qwinsta |ForEach-Object {$_ -replace "s{2,18}",","} | ConvertFrom-Csv
$RDSActiveSessions=@($RDSsessions| where State -eq 'Active').count
Write-Host $RDSActiveSessions

Du kan også få oplysninger om aktive RDS-forbindelser fra Event Viewer-logfiler.

Rediger nu Zabbix-agentens konfigurationsfil (zabbix_agent2.conf) og tilføj muligheden:

UserParameter=ActiveRDSSessions,powershell -NoProfile -ExecutionPolicy bypass -File "C:Program FilesZabbix Agent 2ScriptGetActiveRDPSessionCount.ps1"

De-ExecutionPolicy bypassparameter giver dig mulighed for at køre et PowerShell-script uden at ændre indstillingerne for PowerShell-udførelsespolitikken.

Genstart Zabbix Agent-tjenesten:

Get-Service 'Zabbix Agent 2'| Restart-Service -force

Sørg for, at Zabbix-agenten kan modtage dataene fra den nye parameter. Brug den indbyggedezabbix-getkommandolinjeværktøj til at teste agenten:

zabbix_get -s 127.0.0.1 -p 10050 -k ActiveRDSSessions

I dette eksempel kørte Zabbix et PowerShell-script og returnerede, at der var to RDP-brugersessioner aktive på værten.

PowerShell-koden er normalt ret langsom at køre. Derfor skal du øge timeoutet i agentkonfigurationen fra standard 3 sekunder til 20 sekunder (indstilTimeout=20), ellers vil Zabbix returnere en fejl, når den modtager data fra et script:

ZBX_NOTSUPPORTED: Timeout while executing a shell script.

Når du kører kommandoen, kan du se en anden fejl:

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.

Hvis ja, tillad at acceptere lokale forbindelser i agentkonfigurationsfilen (zabbix_agent2.conf). Tilføj 127.0.0.1-adressen.

Server=192.168.10.100,127.0.0.1

Derefter kan du tilføje en ny parameter til din skabelon. Gå tilgenstandefaneblad og sæt:

  • Navn: Antal aktive RDS-sessioner
  • Type: Zabbix Agent (aktiv)
  • Nøgle: ActiveRDSSessions
  • Type information: Numerisk (usigneret)
  • Opdateringsinterval: 1m
  • Historik opbevaringsperiode: 90d
  • Trendlagringsperiode: 365d

Gå tilOvervågning->Seneste dataog kontroller, at Zabbix nu modtager værdien fra PowerShell-scriptet.

Lad os nu tillade, at PowerShell-scripts køres ved hjælp afsystem.run. Denne metode er mindre sikker, fordi du kan køre enhver kommando på fjernværten via Zabbix. Det er dog praktisk, fordi det giver mulighed for at konfigurere PowerShell-scripts direkte fra Zabbix-webgrænsefladen.

Aktiver følgende parameter i agentens konfigurationsfil:

AllowKey=system.run[*]

Opret derefter en ny ZabbixPunkt:

  • Navn: Dage siden sidste Windows Update-installation
  • Type: Zabbix Agent
  • Nøgle:system.run[powershell.exe -command "(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).days"]
  • Type information: Numerisk (usigneret)
  • Opdateringsinterval: 1d
  • Historie: 180d
  • Trend: 365d

Denne kommando returnerer antallet af dage siden sidste gang, en sikkerhedsopdatering blev installeret på Windows.

Så vi har set på, hvordan du kan få data ind i Zabbix fra PowerShell-scripts, der kører på Windows.

Related Posts