Zabbix 低级发现 - 每个进程的 CPU 使用率 - 两个具有相同键的项目

Zabbix 低级发现 - 每个进程的 CPU 使用率 - 两个具有相同键的项目

我正在尝试使用 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 值的对象。

您可以添加-Uniqueselectcmdlet 以删除重复项。这可能会隐藏您想要记录的数据。

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}]。这样,由于变量发生变化,每个项目都有不同的关键项目。

相关内容