某天下午突然收到一条告警信息:ASA被重启!!

异常 - 10.1.1.1
异常时间 2016.12.11 - 14:10:21

10.1.1.1 reloaded
10.1.1.1(10.1.1.1)

sysUpTime : 00:04:14

上面的报警信息来自内网的zabbix,调用脚本通过微信公众号推送报警信息;针对所有的网络设备都配置了snmp,来监控一些参数。

检查思路,作为出口设备,如果一旦真的重启,引发的报警信息就不只是一条了,初步判断是误报,登陆ASA也能看到,ASA up 1 year 132 days

zabbix上设置的报警的triger是

{10.1.1.1:sysUpTime.last(0)}<600

在思科提供的mib中检查,针对sysuptime的描述如下:

the timetick value for system uptime (OID 1.3.6.1.2.1.1.3.0) is a 32-bit value so once the system has been up for 1 year, 132 days, 2 hours, 27 minutes and 52.96 seconds the value will roll to 0 again

也就是说这个值最多记497天,之后会清零重计。

解决方案就是同时监控这个值snmpenginetime (.1.3.6.1.6.3.10.2.1.3) ,进行综合判断。
这个两个oid都是counter32类型,最大值都是2^32-1=4294967295,区别是sysuptime指设备的网络管理部分,每次系统重新启动时都会重新初始化,单位是百分之一秒,最多到42949672.95s;
snmpenginetime是指设备SNMP模块的运行时间,单位是一秒,最大可以到4294967295s,也就是135年。
另外,即使未重启设备,该模块也可能会独立重启。以下情况会导致SNMP模块重启,并将snmpenginetime清零:

  • 配置SNMPv3(必须配置snmpEngineID)
  • 更改snmpEngineID
  • 设备重启
  • 设备bug导致snmp服务重启

建议监控系统中结合两个oid一起使用。

关于接口流量的最大值

在MIB中,ifOutOctets和ifInOctets来分别表示接口流出数据量和接口流入数据量,单位是字节。其数据类型为counter32。其能表示最大值为2^32-1=4294967295。依据oid的值累加,千兆口跑满32秒就可以达到最大值。

ifHCOutOctets和ifHCInOctets也是分别表示接口流出数据量和接口流入数据量其数据类型为counter64,最大值为16EB这个值的概念是如果千兆口满跑4000多年才能达到。

早起设备有一个这样的建议何时使用何种计数器:

1
2
3
4
<20,000,000 bits/second 使用counter32
<20,000,000 bits/s < 650,000,000bits/s 使用counter32或者counter64
> 650,000,000bits/s 使用 counter64
小于 10 Mb 接口不支持 counter64。

对于目前的设备,建议直接使用counter64:

类型 IF-MIB OID
counter32 ifInOctets 1.3.6.1.2.1.2.2.1.10
counter32 ifOutOctets 1.3.6.1.2.1.2.2.1.16
counter64 ifHCInOctets 1.3.6.1.2.1.31.1.1.1.6
counter64 ifHCOutOctets 1.3.6.1.2.1.31.1.1.1.10

参考文档
CISCO:SNMP计数器:常见问题