Shell脚本之网络流量监控


aihuafeng66t
克里斯蒂亚诺诺 2024-01-09 16:30:43 50626 赞同 0 反对 0
分类: 资源
Shell脚本之网络流量监控

一、需求说明
  互联网出口一般情况下流量不大,而且比较平稳,偶尔会出现业务高峰期,此时互联网出口流量激增。希望监控互联网出口设备的接口流量,在流量突增的时候发出邮件告警。每天定时邮件报告一次一天的平均流量。网络设备流量监控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
————————————————




如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
克里斯蒂亚诺诺L1
粉丝 0 资源 831 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  127
统信桌面专业版【全盘安装UOS系统】介绍  122
银河麒麟桌面操作系统安装佳能打印机驱动方法  114
银河麒麟桌面操作系统 V10-SP1用户密码修改  105
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!