前面我们了解到Zabbix中预置了很多监控项参数,除了默认的监控参数外,我们也可以定义自己的监控参数。
自定义参数可以在agent的/etc/zabbix/zabbix_agentd.conf中配置,格式如下:
UserParameter=key,command
带参数的写法:
UserParameter=key[*],command $1 $2 $3 $4 ……
注意事项:
- 如果key中包含特殊字符,需要在配置文件中的设置UnsafeUserParameters=1。
- 如果定义的command中确实需要使用字符串$X,那么需要使用这种方式进行转义:$$X。
- 为了便于管理,可以将UserParameter的配置额外放在一个单独的目录下,并在配置文件中添加对应的目录:
Include=/etc/zabbix/zabbix_agentd.conf.d/
不同的配置文件中不要有重复项,不然会导致agent启动失败。
修改自定义参数后,需要重启agent以读取新的配置让修改生效。
举例:
我们在CentOS7.3这台Client上面新加一个UserParameter的配置文件/etc/zabbix/zabbix_agentd.d/test.conf,然后向其中添加下面的内容:
UserParameter=clientos,cat/etc/centos-release
UserParameter=clientifconfig,ifconfig
重启agent之后,我们在Zabbixserver上利用wget查看一下我们自定义的key是否可用:
[ZabbixServer] # zabbix_get -s 172.16.0.8 -k clientos
CentOSLinux release 7.3.1611 (Core)
[ZabbixServer] # zabbix_get -s 172.16.0.8 -k clientifconfig
eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.0.8 netmask 255.255.255.224 broadcast 172.16.0.31
inet6 fe80::217:faff:fe00:1e4c prefixlen 64 scopeid 0x20<link>
ether 00:17:fa:00:1e:4c txqueuelen 1000 (Ethernet)
RX packets 485086 bytes 164556707 (156.9 MiB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 809166 bytes 140053244 (133.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:flags=73<UP,LOOPBACK,RUNNING> mtu65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
上面的command中不带参数,我们在test.conf中再添加一个自定义key:
UserParameter=listeningCheck[*],netstat $1 | grep $2
然后我们在Zabbix server上使用zabbix_get测试一下:
[ZabbixServer] # zabbix_get -s 172.16.0.8 -k listeningCheck[-ano,22]
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN off (0.00/0/0)
tcp 0 0 172.16.0.8:22 106.120.78.190:39201 ESTABLISHED keepalive (3092.94/0/0)
tcp6 0 0 :::22 :::* LISTEN off (0.00/0/0)
unix 3 [ ] STREAM CONNECTED 17822
如上面例子所示,多个参数传递需要使用逗号进行分隔。
如果没有对应的key,则zabbix_get会返回ZBX_NOTSUPPORTED: Unsupported item key.消息。可以在Client端使用zabbix_agentd -p | grep <key>查看是否支持某个key:
[Client]# zabbix_agentd -p | grep ^clientos
clientos [t|CentOSLinux release 7.3.1611 (Core)]
下面是一些常用的预定义的key(命令zabbix_agentd -p | grep ^<key>会显示出可用的key以及示例):
网卡流量监控:
Keys:
net.if.in[interfaceName, <mode>] net.if.out[interfaceName, <mode>] net.if.collisions[interfaceName] net.if.discovery net.if.total[interfaceName, <mode>] |
说明:其中mode可选参数有bytes(默认)/packets/errors/dropped
例子:
[Zabbix Server] # zabbix_get -s 172.16.0.8 -k net.if.in[eth0,packets] 489421 [Zabbix Server] # zabbix_get -s 172.16.0.8 -k net.if.in[eth0] 165805726 [Zabbix Server] # zabbix_get -s 172.16.0.8 -k net.if.in[eth0,] 165808700 [Zabbix Server] # zabbix_get -s 172.16.0.8 -k net.if.out[eth0,] 141217086 [Zabbix Server] # zabbix_get -s 172.16.0.8 -k net.if.out[eth0,dropped] 0 [Zabbix Server] # zabbix_get -s 172.16.0.8 -k net.if.collisions[eth0] 0 [Zabbix Server] # zabbix_get -s 172.16.0.8 -k net.if.discovery {"data":[{"{#IFNAME}":"eth0"},{"{#IFNAME}":"lo"}]} |
端口监控相关Keys:
net.tcp.listen[port] net.tcp.port[<ip>,port] net.tcp.service[service,<ip.,<port>] net.tcp.service.perf[service,<ip>,<port>] net.udp.listen[port] |
进程监控相关Keys:
kernel.maxfiles kernel.maxproc proc.num[<name>,<user>,<state>,<cmdline>] proc.mem[<name>,<user>,<state>,<cmdline>] |
系统参数相关Keys:
system.localtime[<type>] system.users.num system.cpu.switches system.cpu.intr system.cpu.util[<cpu>,<type>,<mode>] system.cpu.load[<cpu>,<mode>] system.cpu.num[<type>] system.cpu.discovery system.uname system.hw.chassis system.hw.cpu system.hw.devices system.hw.macaddr system.sw.arch system.sw.os system.swap.size[<device>,<type>] system.swap.in[<device>,<type>] system.swap.out[<device>,<type>] system.uptime system.boottime system.hostname vm.memory.size[<mode>] |
磁盘IO和文件系统的相关Keys:
vfs.file.size[file] vfs.file.time[file,<mode>] vfs.file.exists[file] vfs.file.contents[file] vfs.file.regexp[file,regexp,<encoding>,<start line>,<end line>,<output>] vfs.file.regmatch[file,regexp,<encoding>,<start line>,<end line>,<output>] vfs.file.md5sum[file] vfs.file.cksum[file] vfs.fs.size[fs,<mode>] vfs.fs.inode[fs,<mode>] vfs.fs.discovery vfs.dev.read[<device>,<type>,<mode>] vfs.dev.write[<device>,<type>,<mode>] |
关于上面Key的更详细的参数说明和使用方法,可以参考:
https://www.zabbix.com/documentation/3.2/manual/config/items/itemtypes/zabbix_agent
下面是一些常用的Windows的Keys:
eventlog[name,<regexp>,<severity>,<source>,<eventid>,<maxlines>,<mode>] net.if.list perf_counter[counter,<interval>] proc_info[<process>,<attribute>,<type>] service_state[*] services[<type>,<state>,<exclude>] wmi.get[<namespace>,<query>] |
针对perf_counter,可以利用Windows自己的Performance Monitor的监控参数来进行信息收集,Performance Monitor中所有可用的参数值可以在cmd中使用typeperf -qx命令输出查看(项目比较多,建议输出到文本中)。
使用perf_counter的示例:
[ZabbixServer] # zabbix_get -s 172.16.0.7 -k perf_counter["\Processor(_Total)\%Idle Time"]
99.395250
更详细的用法可以参考:
https://www.zabbix.com/documentation/3.2/manual/config/items/itemtypes/zabbix_agent/win_keys