自定义zabbix脚本

1.  在客户端修改配置文件  /etc/zabbix/zabbix_agentd.conf然后重启服务

需要改动两个地方:

(1)  UnsafeUserParameters=1

(2) UserParameter=my.net.if[*],/usr/local/sbin/zabbix/net.sh $1 $2       #其中UserParameter用来自定义键值,(类似于net.if.in),自己写的脚本往往会有参数,所以需要加[*],这是固定写法,如果脚本压根就没有什么参数,那么这个[*]就省了。逗号后面就是我们写的脚本的路径了,再后面就是要用到的参数,有几个就写几。


2. 编写脚本

vi   /usr/local/sbin/zabbix/net.sh   //内容如下


#!/bin/bash

eth=$1                                 #定义网卡名

io=$2                                  #定义进或者出流量

net_file="/proc/net/dev"               #流量的来源,可自行cat /proc/net/dev一下,得出开机后的总流量。

if [ $2 == "in" ]                      #接上,通过不同时间段的差值,得出某时段的流量。

then

    n_new=`grep "$eth" $net_file|awk '{print $2}'`  #得出指定网卡的receive总值

    n_old=`tail -1 /tmp/neti.log`                   #查看上一次网卡的receive总值

    n=`echo "$n_new-$n_old"|bc`                     #得出2次的receive差值

    d_new=`date +%s`                                #定义新的时间戳

    d_old=`tail -2 /tmp/neti.log|head -1`           #定义上一次的时间戳

    d=`echo "$d_new-$d_old"|bc`                     #得出2次间隔的时间差

    if_net=`echo "$n/$d"|bc`                        #receive差值除以时间差,得出平均流量值

    echo $if_net                                    #显示得的出平均流量值

    date +%s>>/tmp/neti.log                         #追加新的时间戳

    grep "$eth" $net_file|awk '{print $2}'>>/tmp/neti.log #追加新的receive总值

elif [ $2 == "out" ]

then

    n_new=`grep "$eth" $net_file|awk '{print $10}'`

    n_old=`tail -1 /tmp/neto.log`

    n=`echo "$n_new-$n_old"|bc`

    d_new=`date +%s`

    d_old=`tail -2 /tmp/neto.log|head -1`

    d=`echo "$d_new-$d_old"|bc`

    if_net=`echo "$n/$d"|bc`

    echo $if_net

    date +%s>>/tmp/neto.log

    grep "$eth" $net_file|awk '{print $10}'>>/tmp/neto.log

else

    echo 0

fi



这个脚本的思路,就是通过查看文件 /proc/net/dev  里面的数值,来计算实时网卡流量,其实我算的是一个平均值。分为进和出。如果这个脚本每隔1分钟执行一次,那么算出来的流量值就是1分钟的平均值。



3.  在脚本执行前,需要先做一个操作

touch /tmp/net[io].log        #有的SHELL不支持[]这个命令,与版本有关

date +%s >>/tmp/neti.log

grep eth0 /proc/net/dev |awk '{print $2}' >>/tmp/neti.log

date +%s >>/tmp/neto.log

grep eth0 /proc/net/dev |awk '{print $10}' >>/tmp/neto.log

chown zabbix  /tmp/net[io].log


#次脚本有缺陷,因为日志文件只针对一个网卡,如果换个网卡,则出错。需要不同网卡,对应不同日志。

4. 检查脚本是否可用

在服务端执行

zabbix_get -s 192.168.31.166 -p10050 -k "my.net.if[eth0,out]"


5. 如果可以返回数值说明没问题了,接着在浏览器里面配置

组态 --> 主机 --> 项目  --> 创建监控项

名称 “网卡流量出”

类型默认“zabbix代理”

键值  "my.net.if[eth0,out]"

数据更新间隔  60

存档