利用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