Zabbix的用于监视系统参数的内置项相当丰富,但有时似乎很难获得一些东西,例如有多少脏缓存页面。

例如,考虑一下/proc/meminfo在典型的Linux系统上:

Inactive(file):  1348288 kB
Unevictable:       18876 kB
Mlocked:           18876 kB
SwapTotal:       8388604 kB
SwapFree:        8388604 kB
Dirty:             39620 kB
Writeback:           948 kB
AnonPages:       6184596 kB
Mapped:          5319216 kB
Shmem:            427020 kB
Slab:             741476 kB
SReclaimable:     633088 kB
SUnreclaim:       108388 kB
KernelStack:       14528 kB
PageTables:       118816 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    16575460 kB
Committed_AS:   19184632 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:     9692684 kB
DirectMap2M:     7049216 kB


我想要的是39420,来自Dirty行。使用sedgrep的组合,这将像export field=Dirty; grep -e "$field:" /proc/meminfo | sed -e "s/^$field: \+\([0-9]\)\+.*$//"一样简单;

我可以使用UserParameter进行此操作:

UserParameter=proc.meminfo[*], grep -e ":" /proc/meminfo | sed -e "s/^: \+\([0-9]\)\+.*$//"


,然后使用项键proc.meminfo[Dirty]访问该值。

我不想为此使用UserParameter,因为UserParameter要求我向每个节点部署其他配置,并且进程生成会消耗系统熵。两者都是我通常都希望避免的事情。

#1 楼

如果您的Zabbix代理是2.2或更高版本,则可以使用Zabbix代理项vfs.file.regexp,如下所示:

vfs.file.regexp[/proc/meminfo,^Dirty.*([0-9]+),,,,]


如果您的Zabbix是3.4或更高版本,则可以使用主项收集数据Blob(可能是vfs.file.contents),然后使用项目值预处理提取并解析所需值。