您的位置:首页 > 运维架构

自定义zabbix监控脚本

2016-07-19 23:08 441 查看
1. 在客户端修改配置文件 /etc/zabbix/zabbix_agentd.conf #为了方便这里是用yum安装的zabbix

需要改动两个地方:
(1) UnsafeUserParameters=1

(2) UserParameter=my.net.if[*],/usr/local/sbin/zabbix/net.sh $1 $2 #其中UserParameter用来自定义键值,名称可以自定义,如果自己写的脚本带有参数,那么就需要加[*],这是固定写法;如果脚本压根就没有什么参数,那么就直接UserParameter=my.net.if=my.net.if就可以了。逗号后面就是我们写的脚本的路径了,再后面就是脚本要用到的参数,没有参数就不用写。

2. 编写脚本
vim /usr/local/sbin/zabbix/net.sh #我随便写的一个简单的监控网卡流量的脚本

#!/bin/bash
eth=$1
io=$2
net_file="/proc/net/dev"
if [ $io == "in" ]
then
n_new=`grep "$eth" $net_file|awk '{print $2}'`
d_new=`date +%s`
if [ -z $n_new ]
then
echo "not found $eth"
exit
fi

if [ -f /tmp/$eth\_neti.log ] ##neti表示输入流量,neto表示输出流量
then
n_old=`tail -1 /tmp/$eth\_neti.log`
n=$[$n_new-$n_old]
d_old=`tail -2 /tmp/$eth\_neti.log|head -1`
d=$[$d_new-$d_old]
if_net=`echo "$n/$d"|bc` ##求d_old到d_new时间段内每秒平均流量单位byte
echo $if_net
echo $d_new >> /tmp/$eth\_neti.log
echo $n_new >> /tmp/$eth\_neti.log
else
touch /tmp/$eth\_neti.log
chown zabbix /tmp/$eth\_neti.log
echo $d_new >> /tmp/$eth\_neti.log
echo $n_new >> /tmp/$eth\_neti.log
echo "please again try script"
exit
fi

elif [ $io == "out" ]
then
n_new=`grep "$eth" $net_file|awk '{print $10}'`
d_new=`date +%s`
if [ -z $n_new ]
then
echo "not found $eth"
exit
fi

if [ -f /tmp/$eth\_neto.log ]
then
n_old=`tail -1 /tmp/$eth\_neto.log`
n=$[$n_new-$n_old]
d_old=`tail -2 /tmp/$eth\_neto.log|head -1`
d=$[$d_new-$d_old]
if_net=`echo "$n/$d"|bc`
echo $if_net
echo $d_new >> /tmp/$eth\_neto.log
echo $n_new >> /tmp/$eth\_neto.log
else
touch /tmp/$eth\_neto.log
chown zabbix /tmp/$eth\_neto.log
echo $d_new >> /tmp/$eth\_neto.log
echo $n_new >> /tmp/$eth\_neto.log
echo "please again try script"
exit
fi

else
if grep -q "$eth" $net_file
then
echo 0
else
echo "not found $eth"
fi
fi

这个脚本的思路,就是通过查看文件 /proc/net/dev 里面的数值,来计算实时网卡流量,其实我算的是一个平均值,分为进和出。如果这个脚本每隔1分钟执行一次,那么算出来的流量值就是1分钟的平值。该脚本有两个参数第一个是网卡名字如:eth0,第二个是in或者out也就是进或者出流量,该脚本可以计算机器上所有网卡的进出流量只要更改第一个参数eth0,eth1,lo等就可以了。但是有点遗憾,第一次运行时会自动创建*net[io].log的临时文件,第二次运行脚本才能得到数值,当然你也可以手动创建文件并写入时间戳但是我觉得没必要。

3. 检查脚本是否可用
在服务端执行
zabbix_get -s IP -p10050 -k "my.net.if[eth0,out]" ##这个IP是客户端的ip
如果可以返回数值说明没问题了。

4. 接着在浏览器上zabbix里面配置
组态 --> 主机 --> 项目 --> 创建监控项
名称 “eth0_net_out” ##名字可以随意也可以写中文
类型默认“zabbix代理”
键值 "my.net.if[eth0,out]"
存档 ok

当然你也可以把[eth0,in],[eth1,*]等等都加入监控项。

本文出自 “linux运维” 博客,请务必保留此出处http://zhumy.blog.51cto.com/11647651/1827906
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: