Zabbix:如何从PowerShell脚本获取数据

Jacki

在本文中,我们将考虑配置Zabbix代理以检索PowerShell脚本的监视数据。让我们看一下两个PowerShell脚本,以将一些数据输入Zabbix。第一个返回Windows RDS服务器上的活动RDP用户会话的数量,第二个返回Windows更新以来的几天最后安装在服务器上。

Zabbix代理具有从外部PowerShell脚本检索数据的两个功能:

阅读更多:监视网站SSL/TLS证书到期

  • 用户参数代理的配置文件中的选项允许您执行PowerShell代码。如果使用此选项,则必须启用UserParameter选项,并将PS1脚本文件复制到每个Windows主机。
  • 您可以使用PowerShell脚本使用系统。这使您可以直接在Zabbix Web接口中指定PowerShell脚本,并可以运行任意命令。

让我们从使用UserParameter运行PowerShell脚本的示例开始。假设您已经在Windows计算机上安装和配置了Zabbix代理。

以前,我们向您展示了如何使用UserParameter在Zabbix中运行BASH脚本以检查域的到期日期。

创建一个简单的PowerShell脚本,该脚本返回活动RDP会话的数量并将其保存到文件:C:Program FilesZabbix Agent 2ScriptGetActActiverDpsessiveCount.ps1

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

您还可以从事件查看器日志中获取有关活动RDS连接的信息。

现在编辑zabbix代理配置文件(zabbix_agent2.conf)并添加选项:

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

-ExecutionPolicy bypass参数允许您在不更改PowerShell执行策略设置的情况下运行PowerShell脚本。

重新启动Zabbix代理服务:

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

确保Zabbix代理可以从新参数接收数据。使用内置zabbix-get测试代理的命令行工具:

zabbix_get -s 127.0.0.1 -p 10050 -k ActiveRDSSessions

在此示例中,Zabbix运行了一个PowerShell脚本,并回到主机上有两个RDP用户会话。

PowerShell代码通常运行速度很慢。因此,您需要将代理配置中的超时从默认的3秒增加到20秒(设置超时= 20),否则,Zabbix从脚本接收数据时会返回错误:

ZBX_NOTSUPPORTED: Timeout while executing a shell script.

运行命令时,您可以看到另一个错误:

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.

如果是这样,请接受代理配置文件(zabbix_agent2.conf)中的本地连接。添加127.0.0.1地址。

Server=192.168.10.100,127.0.0.1

然后,您可以在模板中添加一个新参数。去项目选项卡并设置:

  • 名称:活动RDS会话的数量
  • 类型:Zabbix代理(活动)
  • 钥匙:activerdssessions
  • 信息类型:数字(未签名)
  • 更新间隔:1m
  • 历史存储期:90D
  • 趋势存储期:365D

监视- >最新数据并检查Zabbix现在是否正在从PowerShell脚本接收值。

现在,让我们允许使用PowerShell脚本使用系统。此方法不太安全,因为您可以通过Zabbix在远程主机上运行任何命令。但是,这很方便,因为它允许直接从Zabbix Web界面配置PowerShell脚本。

在代理的配置文件中启用以下参数:

AllowKey=system.run[*]

然后创建一个新的zabbix物品

  • 名称:自上次Windows更新安装以来的天数
  • 类型:Zabbix代理
  • 钥匙:system.run[powershell.exe -command "(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).days"]
  • 信息类型:数字(未签名)
  • 更新间隔:1D
  • 历史:180d
  • Trenfd:365d

此命令返回自Windows上一次安全更新以来的天数。

因此,我们研究了如何从Windows上运行的PowerShell脚本中将数据输入Zabbix。