一、需求说明
互联网出口一般情况下流量不大,而且比较平稳,偶尔会出现业务高峰期,此时互联网出口流量激增。希望监控互联网出口设备的接口流量,在流量突增的时候发出邮件告警。每天定时邮件报告一次一天的平均流量。网络设备流量监控zabbix等工具都可以实现,此博文仅从shell脚本学习出发,实现如上需求。
二、脚本内容
此流量监控工具包含device_login.sh、netflow_check.sh两个部分,其中device_login.sh用于远程登录设备和采集信息。netflow_check.sh是主脚本,通过调用device_login.sh收集信息,然后通过过滤、存储、计算得到5分钟的平均流量值。当流量大于阈值的时候发出邮件告警。每天上午10钟的时候邮件通知24小时的流量平均值,流量的单位为KB/S。
1、远程登录设备脚本
[root@s146 flow]# cat device_login.sh
#!/usr/bin/expect -f
#auto ssh login
set timeout 300
set sshhost [lindex $argv 0]
set passwd [lindex $argv 1]
spawn ssh -l admin $sshhost
expect "password:"
send "$passwd\r"
expect ">"
send "display int g1/0/1 | in total\r"
expect "<>"
send "quit\r"
expect eof
————————————————
2、流量监控主脚本
[root@s146 flow]# cat netflow_check.sh
#!/bin/bash
#script name: netflow_check.sh
#author: wuhsh
#version: v1
#description: 此脚本用于检查互联网出口流量,每5分钟检查一次
#description: 防火墙5分钟平均流量(入)超过50Mbit/s时邮件告警,平均流量(出)超过15Mbit/s时邮件告警
#参数定义
fwhost=x.x.x.x
passwd=*******
netflow_this=netflow_this.txt
netflow_last=netflow_last.txt
i=0
curdir=`cd -P $(dirname $0); pwd`
cd $curdir
function singlecheck(){
./device_login.sh $fwhost $passwd > $netflow_this
in_this=`sed -n 11p $netflow_this | awk '{print $5}'`
out_this=`sed -n 12p $netflow_this | awk '{print $5}'`
in_last=`sed -n 11p $netflow_last | awk '{print $5}'`
out_last=`sed -n 12p $netflow_last | awk '{print $5}'`
average_in=`expr $in_this - $in_last`
average_in=`expr $average_in / 300`
average_in=`expr $average_in / 1024`
average_out=`expr $out_this - $out_last`
average_out=`expr $average_out / 300`
average_out=`expr $average_out / 1024`
echo $in_this
echo $out_this
if [[ $average_out -ge 1920 ]] ;then
echo "出方向流量突增,5分钟平均出流量 $average_out KB/S" | mailx -s "IDC出口流量告警" 524627027@qq.com
fi
if [[ $average_in -ge 6400 ]] ;then
echo "入方向流量突增,5分钟平均入流量 $average_in KB/S" | mailx -s "IDC出口流量告警" 524627027@qq.com
fi
rm -rf netflow_last.txt
mv netflow_this.txt netflow_last.txt
}
function main(){
while true
do
sleep 300
tmp=$(singlecheck)
array_input[$i]=`echo $tmp |awk '{print $1}'`
array_output[$i]=`echo $tmp |awk '{print $2}'`
time=`date +%H%M`
if [[ $time -ge 1000 && $time -le 1005 && $i -gt 1 ]];then
average_oneday_in=`expr ${array_input[$i]} - ${array_input[0]}`
average_oneday_out=`expr ${array_output[$i]} - ${array_output[0]}`
let i+=1
average_oneday_in=`expr $average_oneday_in / $i`
average_oneday_in=`expr $average_oneday_in / 300`
average_oneday_in=`expr $average_oneday_in / 1024`
average_oneday_out=`expr $average_oneday_out / $i`
average_oneday_out=`expr $average_oneday_out / 300`
average_oneday_out=`expr $average_oneday_out / 1024`
cat sum.txt >> netflowhistory.txt
echo "现在是`date +%F-%T`,最近24小时平均流量如下:" > sum.txt
echo "入方向最近24小时平均流量:$average_oneday_in KB/s" >> sum.txt
echo "出方向最近24小时平均流量:$average_oneday_out KB/s" >> sum.txt
echo "总计检查: $i 次" >> sum.txt
mailx -s "IDC出口流量通知" 524627027@qq.com < sum.txt
i=0
unset array_output
unset array_input
continue
fi
let i+=1
done
}
./device_login.sh $fwhost $passwd > $netflow_last
main
————————————————
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!