目录

​一、 用户自定义参数简介​

​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

  1. Centos8.2最小化(2内存)
  2. Zabbix5.0服务端

vm821

ens32:192.168.128.21

ens33:192.168.3.21

  1. Centos8.2最小化(1.5内存)
  2. Zabbix5.0 agent客户端,被动模式

vm822

ens32:192.168.128.22

ens33:192.168.3.21

  1. Centos8.2最小化(1.5内存)
  2. 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,配置如下图所示:

hualinxu ext zbx 1.6:zabbix5 用户自定义参数 自定义key(仅agent有效)_hualinux zabbix

vm822,主动模式添加监控项,如下所示:

hualinxu ext zbx 1.6:zabbix5 用户自定义参数 自定义key(仅agent有效)_zabbix5.0_02

最后看到效果如下所示: 

hualinxu ext zbx 1.6:zabbix5 用户自定义参数 自定义key(仅agent有效)_zabbi5.0 自定义key_03