zabbix key 的语法

1. 灵活的参数

参数位置可用接收任意参数则是灵活的。例如vfs.fs.size[*],”*”星号可以使用任意的参数,例如:

vfs.fs.size[/]
vfs.fs.size[/opt]

2. Key格式

Item key格式包含key名称和他得参数,参数必须符合规范,请看下面的图片。key的定义要遵循箭头从做到右的规则,如果都符合,那这个key合法,否则不合法。大致流程是:首先验证key名是否合法,如果存在参数那么验证参数是否合法,如果没有参数那直接跳过。

wKiom1S7pX6SQ5lpAABtRok8-U0315.jpg

3. Key名称

key允许如下字符作为名称:

0-9a-zA-Z_-.

大致意思是说允许字符:所有数字、有大小写字幕、下划线、减号、点.

key名称从左到右走下规则,只要又一个字符不符合,那么key就不合法。

wKioL1S7puWBcL7gAABEwuoGA8c837.jpg

4. Key参数


item key可以有多个参数,他们之间用逗号’,’分开。如下图

wKiom1S7poDzKjQIAABWo2vImB8890.jpg

key参数可以是带引号的字符串、不带引号的字符串以及数组。如下图

wKiom1S7pubC-txXAAB7Ni7a0Oc539.jpg

quoted string:带引号字符串
unquoted string:不带引号字符串
array:数组

参数如果为空,那么将会使用他设置的默认值。例如key icmpping[,,200,,500],其中3个参数都为空,那么每200ms会ping一次,超时时间为500ms,其它为空的参数使用默认值。


4.1 参数- 带引号
如果key参数带引号,那么任何unicode数据都合法,如果参数里面带有双引号,那么要使用”\”来转义。具体如下

wKiom1S7p03x_l8uAAC8X6h4w_4647.jpg


4.2 参数- 不带引号
如果kye参数是一个不带引号的字符串,除了逗号和右中括号其他任何unicode字符串都合法。具体看如下图

wKioL1S7qHijjyEJAAB3AU2ACCM015.jpg


4.3 参数- 数组
如果key参数是一个数组,那么数组要多加一对中括号,并且数组里面的参数同样要遵循参数规范,具体如下图

wKiom1S7p-ry6XIJAABKrGwnxVE335.jpg

自定义用户key与参数User parameters

为什么要自定义KEY

有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法。我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter.
语法如下:

UserParameter=<key>,<command>

用户自定义参数包含一个key和一个命令,key必须整个系统唯一,配置好之后,重启客户端。

然后配置item,在key的位置填上我们自定义的key即可。

用户自定义参数里指定的脚本由zabbix agent来执行,最大可以返回512KB的数据

用户自定义key实例

简单点的命令示例:

UserParameter=ping,echo 1

如果调用ping这个key,将会收到返回值1.
更复杂的命令示例:

UserParameter=mysql.ping,mysqladmin -uroot ping|grep -c alive

如果返回1表示MySQL运行中,如果返回0表示MySQL挂了

灵活的自定义key:

如下为灵活的用户自定义参数

UserParameter=key[*],command
参数描述
Key唯一. [*]表示里面可以传递多个参数
Command需要执行的脚本,key的[]里面的参数一一对应$1到$9,一共9个参数。$0表示脚本命令

注意事项

  1. 如果需要使用命令行里面出现$2这种变量,那么你要使用两个$$2,例如awk '{ print $$2 }',之前就遇到过这个问题,不停的测试自己脚本输出正常,但是zabbix却拿不到数据,原来是出在这里。为了防止和参数冲突,所以zabbix做了这 个规定。

  2. zabbix禁止使用一些不安全的参数,如下:
    \ ‘ ” ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @

  3. 从zabbix 2.0开始,zabbix返回文本数据可以是空格。

Example 1

UserParameter=ping[*],echo $1
ping[0] – 将一直返回0
ping[aaa] – 将一直返回 ‘aaa’

Example 2

UserParameter=mysql.ping[*],mysqladmin -u$1 -p$2 ping | grep -c alive
如下参数用于监控MYSQL,并且可以传递用户名和密码。
mysql.ping[zabbix,our_password]

Example 3

统计一个文件中有多少行被匹配?
UserParameter=wc[*],grep -c “$2″ $1
如下方法将会返回文件中出现指定字符的行数
wc[/etc/passwd,root]
wc[/etc/services,zabbix]


操作:Example 2

方案一:

[root@kaibin ~]# vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=mysql.test1,mysqladmin -uroot -p123456 ping|grep -c alive
UserParameter=mysql.test2[*],mysqladmin -u$1 -p$2 ping|grep -c alive
[root@kaibin ~]# /etc/init.d/zabbix_agentd restart
Shutting down zabbix_agentd:                               [确定]
Starting zabbix_agentd:                                    [确定]

在zabbix服务端运行测试命令,查看key

[root@kaibin ~]# zabbix_get -s 192.168.3.120 -k mysql.test1
1
[root@kaibin ~]# zabbix_get -s 192.168.3.120 -k mysql.test2[root,123456]
1

方案二:

[root@kaibin ~]# vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1
Include=/etc/zabbix/zabbix_agentd.conf.d/Item_key.conf
[root@kaibin ~]# vim  /etc/zabbix/zabbix_agentd.conf.d/Item_key.conf
UserParameter=mysql.test1,mysqladmin -uroot -p123456 ping|grep -c alive
UserParameter=mysql.test2[*],mysqladmin -u$1 -p$2 ping|grep -c alive
[root@kaibin ~]# /etc/init.d/zabbix_agentd restart
Shutting down zabbix_agentd:                               [确定]
Starting zabbix_agentd:                                    [确定]
[root@kaibin ~]# zabbix_get -s 192.168.3.120 -k mysql.test1
1
[root@kaibin ~]# zabbix_get -s 192.168.3.120 -k mysql.test2[root,123456]
1