目录
一、 用户自定义参数简介
1.1 介绍
1.2 UserParameter语法
1.2.1 自定义key中对特殊字符的处理
1.2.2 key的返回值
二、例子
2.1 需求及分析
2.1.1 需求
2.1.2 分析
2.2 实例操作
2.2.1 修改agent配置
2.2.2 用命令测试
2.3 测试一下监控效果
当我们写监控的时候,发现系统自带的key不能满足要求时,那么就需要自定义监控项items 的key了。你可以编写一个命令来检索所需的数据,并将其包含在用户自定义参数agent 配置文件中 ('UserParameter' 参数配置),UserParameter就包括了key和所使用的获取监控数据的命令。
注意:用户自定义参数(UserParameter)仅支持Agent的方式,对于其他方式它是不支持的
一、 用户自定义参数简介
1.1 介绍
有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法。
用户定义参数可以用来帮助用户实现通过Zabbix agent执行非Zabbix原生的 agent check。
你可以编写一个命令来检索所需的数据,并将其包含在用户自定义参数agent 配置文件中 ('UserParameter' 参数配置)。
PS:用户自定义参数(UserParameter)仅支持Agent的方式,对于其他方式它是不支持的。
1.2 UserParameter语法
我们可以在agent客户端配置文件zabbix_angentd.conf里面配置UserParameter,语法如下:
#UserParameter可以有多个,key不能相同,不要和原有的产生冲突
UserParameter=<key>,<command>
key名称的定义范围如下:
所有的数字(0~9)
所有的小写字母(a~z)
所有的大写字母(A~Z)
下画线(_)
横线(-)
点(.)
除了上面这种写法,还支持参数传递的写法,具体如下:
UserParameter=key[*], command $1 $2 $3 ...
参数
| 描述
|
key
| Item key具有唯一性,定义[*]可以接收参数
|
command
| Zabbix将[]中的参数传递给命令中的$1,..,$9,将值作为命令的一部分
|
PS:例子
#把$2、$1的值传递给key,在agent配置文件中可以这样写
UserParameter=wc[*] ,grep -C "$2" $1
#zabbix_get执行测试命令可以写成这样
zabbix_get -s 127.0.0.1 -k wc [/etc/passwd,root]
1.2.1 自定义key中对特殊字符的处理
如果UserParameter包含\' ” `*?[ ]{}~$!&;( )<>|#@这些字符,在默认情况下,Zabbix对这些参数,是无法正常处理的,需要在zabbix_agentd.conf中开启参数UnsafeUserParameters,并将其值设置为1。最后重启zabbix_agentd服务
PS:在默认情况下,$1、$2、$3、$4代表位置参数1、2、3、4,如果在定义的字符串中出现$后面接数
字的情况,则需要用$$。例如awk ’{ print $$2 }’
1.2.2 key的返回值
自定义参数可以返回文本(character、log、text)和空值,如果返回的是一个无效值,则显示ZBX_NOTSUPPORTED。
二、例子
我们来一个简单的例子,我在《zabbix5 agent配置主动模式》的文章中,添加了多了1个agent并配置了主动模式,大概情况如下表:
主机名 | IP地址(外网) | IP地址(内网) | 描述 |
vm82 | ens32:192.168.128.82 | ens33:192.168.3.82 | - Centos8.2最小化(2内存)
- Zabbix5.0服务端
|
vm821 | ens32:192.168.128.21 | ens33:192.168.3.21 | - Centos8.2最小化(1.5内存)
- Zabbix5.0 agent客户端,被动模式
|
vm822 | ens32:192.168.128.22 | ens33:192.168.3.21 | - Centos8.2最小化(1.5内存)
- Zabbix5.0 agent客户端,主动模式
|
那么我就在上面的配置中删除之前所有主机配置,为了方便实验。
2.1 需求及分析
2.1.1 需求
假如公司有centos6、centos7、centos8 3种版本的amd64位系统,版本不一样安装方式也不一样,所以我想有一个key,显示主机所以的系统版本的。
下面是公司存在的centos 3种系统,如下:
#CentOS6
[root@vm65 ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
#CentOS7
[root@vm76 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
#CentOS8
[root@vm821 ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
要求就成:CentOS6、CentOS7、CentOS7,这样的
2.1.2 分析
可以先用shell命令写出达到的效果,如下:
awk '{print $1$(NF-1)}' /etc/redhat-release|cut -c1-7
#效果如下:
[root@vm65 ~]# awk '{print $1$(NF-1)}' /etc/redhat-release|cut -c1-7
CentOS6
[root@vm76 ~]# awk '{print $1$(NF-1)}' /etc/redhat-release|cut -c1-7
CentOS7
[root@vm821 ~]# awk '{print $1$(NF-1)}' /etc/redhat-release|cut -c1-7
CentOS8
我把它变成 UserParameter的写法,key我设置为hualinux.sys.version,又因包含有特别字符需要加多一个$号,最终变成
UserParameter=hualinux.sys.version,awk '{print $$1$$(NF-1)}' /etc/redhat-release|cut -c1-7
2.2 实例操作
2.2.1 修改agent配置
在agent客户端vm821和vm822,修改配置,操作如下:
#开启 UnsafeUserParameters
cd /etc/zabbix/
#备份配置
cp zabbix_agentd.conf zabbix_agentd.conf.$(date +%y%m%d)
# zabbix默认过滤掉特殊字符,以增加安装性,设置 UnsafeUserParameters=1
sed -i '/UnsafeUserParameters=/s/0/1/' zabbix_agentd.conf
sed -i '/UnsafeUserParameters=/s/# //' zabbix_agentd.conf
#直接放在UserParameter中发现有问题,$(NF-1)取不到值,所以直接起一个sh脚本了
mkdir -p /disk1/zabbix_sh
cat>/disk1/zabbix_sh/sys.version.sh<<EOF
#!/bin/bash
awk '{print \$1\$(NF-1)}' /etc/redhat-release|cut -c1-7
EOF
cat /disk1/zabbix_sh/sys.version.sh
sh /disk1/zabbix_sh/sys.version.sh
#直接在尾部添加 UserParameter=hualinux.sys.version,
#awk \'{print $$1$$(NF-1)}\' /etc/redhat-release|cut -c1-7
cat>>zabbix_agentd.conf<<EOF
UserParameter=hualinux.sys.version,sh /disk1/zabbix_sh/sys.version.sh
EOF
#重启agent
systemctl restart zabbix-agent
systemctl status zabbix-agent
#效果如下:
[root@vm821 ~]# grep UnsafeUserParameters= /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1
[root@vm821 zabbix]# tail -1 zabbix_agentd.conf
UserParameter=hualinux.sys.version,sh /disk1/zabbix_sh/sys.version.sh
2.2.2 用命令测试
在zabbix服务端用命令测试一下效果
#使用zabbix_get测试一下被动模式,主动模是不能用zabbix_get测试的
[root@vm82 ~]# zabbix_get -s 192.168.3.21 -k hualinux.sys.version
CentOS8
2.3 测试一下监控效果
打开zabbix web,添加一个监控项,具体怎么添加监控项,我这里我就不说了,可以回看《zabbix 配置流程讲解》
被动模式的vm821,配置如下图所示:
vm822,主动模式添加监控项,如下所示:
最后看到效果如下所示: