设为首页 收藏本站
查看: 770|回复: 0

nagios 监控 网卡流量 脚本

[复制链接]

尚未签到

发表于 2019-1-14 06:12:12 | 显示全部楼层 |阅读模式
#!/bin/bash
#
#Time     : 2014-06-23
#Author   : ftlynx
#Function : use NET-SNMP get NIC traffic on nagios.
Usage(){
echo "Usage: check_traffic.sh [options]"
echo "     -H     Host IP."
echo "     -P     net-snmp community string."
echo "     -N     NIC desc."
echo "     -W     nagios warning value. Format: 200,300.  200 is in traffic. 300 is out traffic. unit:Kb. Default: 5000,5000"
echo "     -C     nagios crit    value. Reference -W. Default: 10000,10000"
echo "     -V     net-snmp version. Default 2c."
exit 2
}
DefaultValue(){
if [ -z "$IP" -o -z "$nicdesc" -o -z "$community" ];then
echo -e "Error:Parameter not enough.\n"
Usage
fi
if [ -z "$warn" ];then
warn="5000,5000"
fi
if [ -z "$crit" ];then
crit="10000,10000"
fi
if [ -z "$version" ];then
version=2c
fi
}
GetResult(){
while [ 1 ]
do
index=`snmpwalk -v $version -c $community $IP IF-MIB::ifDescr | grep "${nicdesc}$" |awk -F '.' '{print $2}' |awk '{print $1}'`
if [ $? -ne 0 ];then
    echo "Error: snmpwalk wrong."
    exit 2
fi
if [ -z "$index" ];then
continue
else
break
fi
done
tempfile="/tmp/traffic.${IP}-$index"
while [ 1 ]
do
if [ -f "$tempfile" ];then
value=`cat $tempfile`
last_time=`echo "$value" | awk '{print $1}'`
last_in_traffic=`echo "$value" |awk '{print $2}'`
last_out_traffic=`echo "$value" |awk '{print $3}'`
now_time=`date +%s`
now_in_traffic=`snmpwalk -v $version -c $community $IP IF-MIB::ifInOctets.${index} |awk '{print $NF}'`
now_out_traffic=`snmpwalk -v $version -c $community $IP IF-MIB::ifOutOctets.${index} |awk '{print $NF}'`
if [ -z "$now_in_traffic" -o -z "$now_out_traffic" ];then
sleep 10
continue
fi
in_traffic=$(($now_in_traffic - $last_in_traffic))
out_traffic=$(($now_out_traffic - $last_out_traffic))
second=$(($now_time - $last_time))
else
now_time=`date +%s`
now_in_traffic=`snmpwalk -v $version -c $community $IP IF-MIB::ifInOctets.${index} |awk '{print $NF}'`
now_out_traffic=`snmpwalk -v $version -c $community $IP IF-MIB::ifOutOctets.${index} |awk '{print $NF}'`
if [ -z "$now_in_traffic" -o -z "$now_out_traffic" ];then
sleep 10
continue
fi
in_traffic=0
out_traffic=0
fi
echo "$now_time $now_in_traffic $now_out_traffic" > $tempfile
if [ $? -ne 0 ];then
echo "$tempfile write fail."
exit 2
fi
if [ $in_traffic -le 0 -o $out_traffic -le 0 ];then
sleep 10
continue
else
        in_result=$(($in_traffic / $second / 1024 * 8))
out_result=$(($out_traffic / $second / 1024 * 8))
break
fi
done
#warn vaule
in_warn=`echo $warn |awk -F ',' '{print $1}'`
out_warn=`echo $warn |awk -F ',' '{print $2}'`
#crit value
in_crit=`echo $crit | awk -F ',' '{print $1}'`
out_crit=`echo $crit | awk -F ',' '{print $2}'`
echo "IN: ${in_result}Kbps[${in_warn}Kbps][${in_crit}Kbps]  OUT: ${out_result}Kbps[${out_warn}Kbps][${out_crit}Kbps] | IN=${in_result}Kb; OUT=${out_result}Kb;"
if [ $in_result -ge $in_crit -o $out_result -ge $out_crit ];then
exit 2
fi
if [ $in_result -ge $in_warn -o  $out_result -ge $out_warn ];then
exit 1
fi
exit 0
}
while getopts H:P:N:W:C:V: args
do
case $args in
H)
IP="$OPTARG"
;;
P)
community="$OPTARG"
;;
W)
warn="$OPTARG"
;;
C)
crit="$OPTARG"
;;
V)
version="$OPTARG"
;;
N)
nicdesc="$OPTARG"
;;
?)
Usage
esac
done
DefaultValue
GetResult  需要注意的地方:

  •   使用IF-MIB::ifDescr,使用网卡名称来获取网卡对应的索引值,然后使用IF-MIB::ifInOctets.{index}和IF-MIB::ifOutOctets.{index}来获取网卡的进出流量。
      使用snmpwalk -v 2c -c public 127.0.0.1 IF-MIB::ifDescr 来查看有哪些接口,找到自己对应的。
  •   要保证使用snmpwalk能抓取到数据。所以脚本中使用死循环来判断。
  •   由于使用的snmp的32位计数器,所以当达到最大值时,计数器会从头开始。这样取两次间隔时会出现负数,所以脚本中有判断两次间隔的值一定要大于0。同时使用sleep 10来延迟10秒再取值,同时 这个间隔时间最好不要小于10s,因为使用snmpwalk抓取数据时,间隔太小会导致抓取到的值是一样的。
  •   临时文件的权限,如果先手动运行就会就root用户,导致放在naigos中的时候不能写临时文件。
  •   被监控机要安装snmp服务。
  •   本脚本实用于linux 和windows。同时满足pnp4nagios的绘图。当然要自己定义模板(见下面)

  

  本人使用:
  定义nagiso命令:
define command{
        command_name    check_traffic
        command_line    $USER1$/check_traffic.sh -H $HOSTADDRESS$ -P $ARG1$ -W $ARG2$ -C $ARG3$ -N $ARG4$  #ARG1 is snmp-community; ARG2 is warn; ARG3 is crit; ARG4 is NIC Name
}  定义nagios 服务:
  windows 的
define service{
        use                     XXX
        host_name               XXX
        service_description     wan_traffic
        check_command           check_traffic!public!5000,5000!9000,9000!"Net Device PV Driver #2"
}  linux的

define service{
        use                     XXX
        host_name               XXX
        service_description     wan_traffic
        check_command           check_traffic!public!10000,12000!14000,14000!eth1
}  

  pnp4nagios的模板
[root@nagios pnp4nagios]# cat share/templates/check_traffic.php
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-662882-1-1.html 上篇帖子: nagios数据库 主机相关信息查询 下篇帖子: 只有以前的数据,没有现在的数据 Nagios mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表