zabbix 自定义监控项如用ping监测链路【userparameter.conf】
一、在装有agent客户端的服务器上的在指定的路径上编写脚本,下图(zabbix_agentd.conf 部分截图)为配置路径位置
修改以下参数:
Timeout=30
注:超时时间为30秒
如果采用默认的参数,可能出现如下的错误:
如果zabbix 段出现上述错误,还需要修改zabbix_server.conf配置文件中的Timeout=30
二、编写 userparameter.conf 配置文件
vi /etc/zabbix/zabbix_agentd.d/pingyz.conf
UserParameter=ping.time[*],bash /etc/zabbix/shell/pingyztime.sh $1
UserParameter=ping.loss[*],bash /etc/zabbix/shell/pingyzloss.sh $1
UserParameter= 这个为固定的,后面的内容以逗号隔开
其中第一个参数为 监控项名字【key】, 如果需要额外的输入参数,则添加[*]
第二个参数为执行的脚本,$1代表外部输入的第一个参数,$2代表外部输入的第二个参数,依此类推
三、编写脚本
vi /etc/zabbix/shell/pingyzloss.sh
resultloss=` ping -i 0.2 $1 -c 10 -w 3 | grep loss| awk -F '[ %]+' '{print $6}' `
echo ${resultloss}
还可以使用如下的脚本(这个脚本测试过,没有问题,上面那个脚本测试有点问题)
resultloss=`ping -c 8 -w $1 | grep 'packet loss' | awk -F'packet loss' '{print $1}' | awk '{print $NF}' | sed 's/%//g'`
echo ${resultloss}
(1)**NF** 表示字段数,在执行过程中对应于当前的字段数。
(2)sed 命令 替换操作:s命令 替换文本中的字符串 。栗子:sed 's/book/books/' file
(3)sed 命令 替换标记 :g 表示行内全部替换 栗子: sed 's/book/books/g' file
找到packet loss 的行 ,以packet loss分隔。打印第一条字段,把%替换成空
vi /etc/zabbix/shell/pingyztime.sh
resulttime=` ping $1 -c 1 | grep icmp_seq| awk -F '[=m]' '{print $7}' `
echo ${resulttime}
四、 重启zabbix agent
service zabbix-agent restart
五、 在agent端进行验证
zabbix_agentd -t ping.loss["10.255.12.2"]
ping.loss[10.255.12.2] [t|0]
如果出现上面的提示表示agent端配置没有问题。
六、zabbix服务器上添加配置,创建item
如图
主要配置在 *Key, 其中自己配置的不能从Select得到,直接在输入框录入
比如:redis.keys.count["{$redis.hostIp}","{$redis.port}",]
中括号里的值为参数,使用逗号隔开参数,参数可以在宏里面定义,然后使用{$}获取,如下图定义
参数与第一个步骤的外部输入参数相呼应。
下面图为示意图,本次样例直接写死,没有写在宏里面
参数与第一个步骤的外部输入参数相呼应。
七、添加告警
{172.24.65.130:ping.loss[10.255.12.2].last()}>0