利用shell简单监控网络设备的接口状态发出告警

 作者:邓聪聪

#!/bin/sh
Date=$(date +%F_%T)
iplist=`cat ip.txt |awk '{print $1}'`
snmp="hjsz-snmp"
#Name=/root/test/name.txt
Descr=/root/test/descr.txt
#Alias=/root/test/Alias.txt
Status_befor=/root/test/Tmp_status.txt
Status_now=/root/test/Status_now.txt
Tmp_chg_id=/root/test/tmp_chg.txt

while true
do
        for ip in $iplist
        do
                {
                #首次获取接口状态
                snmpwalk  -v 2c -c $snmp $ip ifOperStatus >$Status_befor.$ip
                sleep 15
                while true
                do
                        
                        #再次获取接口状态
                        snmpwalk  -v 2c -c $snmp $ip ifOperStatus >$Status_now.$ip
                        cat $Status_now.$ip $Status_befor.$ip | sort -nr | uniq -c | grep "1 IF-MIB" > $Tmp_chg_id.$ip
                        if [ $? -eq 0 ];then
                                for i in `cat $Tmp_chg_id.$ip |awk -F'.' '{print $2}' | awk '{print $1}' | sort -nr | uniq`
                                        do
                                                #获取当前设备OID值的接口
                                                snmpwalk  -v 2c -c $snmp $ip ifDesc >$Descr
                                                #获取初始的接口状态
                                                now_stat=`cat $Status_now.$ip |grep "ifOperStatus.$i " | awk '{print $NF}'`
                                                #获取当前的接口状态
                                                now_stat=`cat $Status_now.$ip |grep "ifOperStatus.$i " | awk '{print $NF}' |awk -F '(' '{print $1}'`
                                                #获取当前设备OID值的接口名称
                                                sw_port=`cat $Descr | grep "ifDescr.$i " | awk '{print $NF}'`
                                                #获取当前设备OID值的设备名称
                                                sysname=`snmpwalk  -v 2c -c $snmp $ip SNMPv2-MIB::sysName.0 |awk '{print $4}'`
                                                #获取当前设备OID值的描述信息
                                                sysalias=`snmpwalk  -v 2c -c $snmp $ip ifAlias |grep "ifAlias.$i " | awk '{print $NF}'`
                                                echo "$sysname|$sw_port|$now_stat|$sysalias"
                                        done
                        fi
                break
                done
                } &
        wait
        done
sleep 3
done
原文地址:https://www.cnblogs.com/dengcongcong/p/9991653.html