我正在尝试使用 Zabbix 来监视 Windows Server 上不同进程的 CPU 使用情况。要监控的流程不是预先确定的。我想使用 LLD 来监控前 3 个 CPU 要求最高的进程。
目前,我创建了一个发现规则,该规则在给定时刻返回前 3 个 CPU 要求最高的进程,例如:
{
{
"name":"DistributedCacheService",
"value":"9238.09375"
},
{
"name":"System",
"value":"6649.234375"
},
{
"name":"svchost",
"value":"5224.40625"
}
}
然后我使用 json 路径和项目原型创建了宏,这就是我开始遇到问题的地方。我正在使用之前创建的 LLD 宏作为项目名称,并且正在使用 system.run 命令来获取关键字段中的值。项目名称应该是进程名称和项目键,值应该是该进程的CPU使用率。[在此处输入图像描述][1] [1]:https://isstatic.askoverflow.dev/HuNbd.png
测试发现规则和项目原型时,一切运行正常,但是当我尝试运行该发现规则时,我收到错误
"无法创建项目:具有相同键的项目 "system.run[powershell.exe -nolog -command "(Get-Process | Sort-Object CPU -desc | Select-Object -index 0 | Format-Table -Aut... ]"已经存在。 "
首先,没有其他项目具有相同的密钥。
其次,当我的发现规则将检测到其他进程时,必须创建具有相同密钥的其他项目。其他名称,但相同的键
甚至可以使用 LLD 创建进程 CPU 使用情况监控吗?我不想被预定义的流程卡住,我想用 LLD 动态添加它们。
Zabbix 要求单个主机的密钥是唯一的,因此如果您按名称存储进程( https://www.zabbix.com/documentation/current/manual),当存在多个相同命名的进程时会遇到问题/配置/项目/项目)
进程名称不需要是唯一的,因此 Get-Process 返回具有重复 ProcessName 值的对象。
您可以添加
-Unique
到select
cmdlet 以删除重复项。这可能会隐藏您要记录的数据。Zabbix 团队似乎在这里提供了解决此问题的方法:https: //support.zabbix.com/browse/ZBXNEXT-164
UserParameter=top,top -n 1 -b|head -20
对于您创建的每个项目,您必须创建一个新的 keyitem,例如 get.top.proccess.[{#Name}]。这样,每个项目都有一个不同的关键项目,因为变量会发生变化。