我正在尝试使用 Zabbix 监控 Windows Server 上不同进程的 CPU 使用情况。要监控的进程尚未预先确定。我想使用 LLD 监控 CPU 占用率最高的 3 个进程。
目前我已经创建了一条发现规则,返回给定时刻 CPU 需求最高的 3 个进程,例如:
{
{
"name":"DistributedCacheService",
"value":"9238.09375"
},
{
"name":"System",
"value":"6649.234375"
},
{
"name":"svchost",
"value":"5224.40625"
}
}
然后我使用 json 路径和项目原型创建了宏,这就是我开始遇到问题的地方。我使用之前创建的 LLD 宏作为项目名称,并使用 system.run 命令在键字段中获取值。项目名称应该是进程名称和项目键,值应该是该进程的 CPU 使用率。[在此处输入图片描述][1] [1]: https://i.stack.imgur.com/HuNbd.png
测试发现规则和项目原型时一切运行正常,但当我尝试运行该发现规则时出现错误
“无法创建项:具有相同键“system.run[powershell.exe -nolog -command "(Get-Process | Sort-Object CPU -desc | Select-Object -index 0 | Format-Table -Aut...]”的项已存在。“
首先,没有其他具有相同密钥的项目。
其次,当我的发现规则检测到其他进程时,必须创建具有相同密钥的其他项目。其他名称,但相同的密钥
是否可以使用 LLD 创建进程 CPU 使用率监控?我不想被预定义的进程所困扰,我希望使用 LLD 动态添加它们。
答案1
Zabbix 要求密钥对于单个主机是唯一的,因此,如果按名称存储进程,当有多个同名进程时,就会遇到问题(https://www.zabbix.com/documentation/current/manual/config/items/item)
Get-Process | sort "CPU" -Descending | select -First 3
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
117 247.48 170.53 3,682.67 2232 1 Minesweeper
47 564.25 528.42 3,491.36 15768 1 calc
33 126.67 93.09 1,179.27 12960 1 Minesweeper
进程名称不需要唯一,因此 Get-Process 返回具有重复 ProcessName 值的对象。
您可以添加-Unique
到select
cmdlet 以删除重复项。这可能会隐藏您想要记录的数据。
Get-Process | sort "CPU" -Descending | select -First 3 -Unique
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
117 248.00 171.31 3,683.27 2232 1 Minesweeper
47 563.74 527.91 3,491.36 15768 1 calc
Zabbix 团队似乎在这里提供了解决此问题的解决方法: https://support.zabbix.com/browse/ZBXNEXT-164
UserParameter=top,top -n 1 -b|head -20
答案2
对于您创建的每个项目,您必须创建一个新的关键项目,例如 get.top.proccess.[{#Name}]。这样,由于变量发生变化,每个项目都有不同的关键项目。