当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Zabbix:如何从 PowerShell 脚本获取数据

作者:精品下载站 日期:2024-12-14 06:35:38 浏览:13 分类:玩电脑

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


在本文中,我们将了解配置 Zabbix Agent 以从 PowerShell 脚本检索监控数据。让我们看一下两个 PowerShell 脚本,用于将一些数据输入 Zabbix。第一个返回 Windows RDS 服务器上的活动 RDP 用户会话数,第二个返回自上次在服务器上安装 Windows 更新以来的天数。

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

  • 代理配置文件中的UserParameter选项允许您执行PowerShell代码。如果使用此选项,则必须启用 UserParameter 选项并将 PS1 脚本文件复制到每个 Windows 主机。

  • 您可以使用system.run运行PowerShell脚本。这允许您直接在 Zabbix Web 界面中指定 PowerShell 脚本,并可以运行任意命令。

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

之前我们向您展示了如何使用 UserParameter 在 Zabbix 中运行 bash 脚本来检查域的过期日期。

创建一个简单的 PowerShell 脚本,返回活动 RDP 会话的数量并将其保存到文件中:C:\Program Files\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

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

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

UserParameter=ActiveRDSSessions,powershell -NoProfile -ExecutionPolicy bypass -File "C:\Program Files\Zabbix Agent 2\Script\GetActiveRDPSessionCount.ps1"

[玩转系统] Zabbix:如何从 PowerShell 脚本获取数据

-ExecutionPolicy bypass

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

重启Zabbix Agent服务:

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 用户会话。

[玩转系统] Zabbix:如何从 PowerShell 脚本获取数据

PowerShell 代码的运行速度通常相当慢。因此,您需要将代理配置中的超时从默认的3秒增加到20秒(设置Timeout=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 Agent(主动)

  • 键:ActiveRDSSessions

  • 信息类型:数字(无符号)

  • 更新间隔:1m

  • 历史存储期限:90d

  • 趋势存储期限:365d

[玩转系统] Zabbix:如何从 PowerShell 脚本获取数据

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

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

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

AllowKey=system.run[*]

然后创建一个新的 Zabbix Item

  • 名称:自上次安装 Windows 更新以来的天数

  • 类型:Zabbix Agent

  • 钥匙:

    system.run[powershell.exe -command "(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).days"]
  • 信息类型:数字(无符号)

  • 更新间隔:1d

  • 历史:180d

  • 趋势:365d

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

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

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯