是否有用于 Cisco Track Objects 的 SNMP MIB

网络工程 路由 snmp 管理 故障转移
2021-07-10 21:56:43

我的目标是编写一个服务检查,以提取正在执行Boolean OR. 我目前有一个屏幕抓取工具,但是在扩展这种类型的服务检查方面这真的不是很理想。

如果object 10object 20两者都不可达,下面的跟踪对象只是拉出被跟踪的静态路由,允许安装 BGP 学习的默认路由,否则处于 RIB 故障状态。

配置示例:

!
track 10 ip sla 1 reachability
!
track 20 ip sla 2 reachability
!
track 30 list boolean or
 object 10
 object 20
!
ip sla 1
 icmp-echo 8.8.8.8 source-ip 10.10.10.10
ip sla schedule 1 life forever start-time now
ip sla 2
 icmp-echo 4.2.2.2 source-ip 10.10.10.10
ip sla schedule 2 life forever start-time now

ip route 0.0.0.0 0.0.0.0 10.10.10.1 track 30

Boolean OR从 OID 中提取更改数量或状态(向上或向下)将是理想的

HOSTNAME#show track 30
Track 30
  List boolean or
  Boolean OR is Up
    14716 changes, last change 02:18:47
    object 10 Up
    object 20 Up
  Tracked by:
    STATIC-IP-ROUTINGTrack-list 0

我一直在搜索 Google 机器、论坛和Cisco SNMP Object Navigator无济于事。

2个回答

我不相信有一种方法可以OR通过SNMP直接轮询结果,但是您当然可以轮询IP SLA结果并自己计算。

使用CISCO-RTTMON-MIB (1.3.6.1.4.1.9.9.42),您可以检查可达性检查的超时值,获取它返回的真/假值,并OR使用您使用的任何脚本语言执行此操作通过 SNMP 轮询。


例如,我设置了一个与你上面类似的测试:

track 10 ip sla 1 reachability
!
track 20 ip sla 2 reachability
!
track 30 list boolean or
 object 10
 object 20
!
ip sla 1
 icmp-echo 8.8.8.8 source-ip 10.129.10.62
ip sla schedule 1 life forever start-time now
ip sla 2
 icmp-echo 4.2.2.2 source-ip 10.129.10.62
ip sla schedule 2 life forever start-time now
!
ip route 10.171.20.0 255.255.255.252 10.129.10.61 track 30

然后,我在 IOS 中验证了输出:

R-VOIPLAB#show track 30
Track 30
  List boolean or
  Boolean OR is Up
    2 changes, last change 00:01:21
    object 10 Up
    object 20 Up

接下来,在 IP SLA 跟踪到位后,我在我的监控服务器上安装了 CISCO-RTTMON-MIB,并遍历了 rttMonCtrlOperTimeoutOccurred (1.3.6.1.4.1.9.9.42.1.2.9.1.6)的值,因为它是 True/False 输出.

需要注意的关键项目是,由于我们正在轮询是否发生超时,因此False 表示目的地可达,而True 表示不可达且已发生超时

snmpwalk -v3 -a SHA -A SNMP-AUTH-PASS -l authNoPriv -u SNMPUSER r-voiplab rttMonCtrlOperTimeoutOccurred
CISCO-RTTMON-MIB::rttMonCtrlOperTimeoutOccurred.1 = INTEGER: false(2)
CISCO-RTTMON-MIB::rttMonCtrlOperTimeoutOccurred.2 = INTEGER: false(2)

最后,我将那个盒子的流量黑洞化到 8.8.8.8,并再次检查 IOS 中的 Track 结果:

R-VOIPLAB(config)#ip route 8.8.8.8 255.255.255.255 null 0
R-VOIPLAB(config)#end
R-VOIPLAB#show track 30
Track 30
  List boolean or
  Boolean OR is Up
    2 changes, last change 00:21:18
    object 10 Down
    object 20 Up
  Tracked by:
    STATIC-IP-ROUTING 0

现在我们有一个处于Down状态的测试对象,让我们再次查看轮询 rttMonCtrlOperTimeoutOccurred 的结果:

snmpwalk -v3 -a SHA -A SNMP-AUTH-PASS -l authNoPriv -u SNMPUSER r-voiplab rttMonCtrlOperTimeoutOccurred
CISCO-RTTMON-MIB::rttMonCtrlOperTimeoutOccurred.1 = INTEGER: true(1)
CISCO-RTTMON-MIB::rttMonCtrlOperTimeoutOccurred.2 = INTEGER: false(2)

现在,正如我上面所说的,您只需要轮询这些值并在脚本中使用它们即可。

我们遇到了同样的问题,我找到了解决方案:

根据RFC 2982,它被称为Expression MIB您可以通过创建新的 SNMP OID 对象在此级别上进行逻辑 OR,该对象将在 SNMP 请求到达此 OID 的路由器/交换机的同时进行计算。

之后,您可以使用此对象轮询 2 个或更多 ORed(通过 Expression MIB)IP SLA 探测的 SNMP 统计信息。

如果您愿意,我可以为您提供更多详细信息。我还将准备有关它的博客文章,其中包含如何通过 Expression MIB 为该特定用途创建新的 SNMP OID 的分步说明。

假设您在设备上配置了 3 个 HTTP IP SLA 探针,并且您想要监控(通过 SNMP)ORed 结果:

  1. IP SLA 索引 / rttMonHTTPStatsEntry == 3000
  2. IP SLA 索引 / rttMonHTTPStatsEntry == 3001
  3. IP SLA 索引 / rttMonHTTPStatsEntry == 3002

您可以使用以下 OID rttMonLatestHTTPOperSense(每个条目 / ip sla 探测器一个)并将其值分配给变量,以便在表达式评估中使用此值。

如何:

  1. 销毁最终创建的旧表达式

    snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.2.3.1.3.101.49.101.120.112 整数 6

  2. 创建并等待

    snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.2.3.1.3.101.49.101.120.112 整数 5

  3. 创建稍后用于检索表达式结果的索引

    snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.2.3.1.2.101.49.101.120.112 u 1

  4. 表达式的描述

    snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.1.1.4.1 s “表达式 MIB - IP SLA 探针 ORing”

  5. 要评估的表达式

    snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.1.1.2.1 s '((($1 < 2) && ($1 > 0)) || (($2 < 2) && ($2) > 0)) || (($3 < 2) && ($3 > 0)))'

  6. 为 rttMonLatestHTTPOperSense 设置变量 $1

    snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.2.1.1 对象标识符 1.3.6.1.4.1.9.9.42.1.5.1.1.6.3000

  7. 为 rttMonLatestHTTPOperSense 设置变量 $2

    snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.2.1.2 对象标识符 1.3.6.1.4.1.9.9.42.1.5.1.1.6.3001

  8. 为 rttMonLatestHTTPOperSense 设置变量 $3

    snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.2.1.3 对象标识符 1.3.6.1.4.1.9.9.42.1.5.1.1.6.3002

  9. 将 $1 变量的类型设置为绝对(对于 delta 为 2)

    snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.4.1.1 整数 1

  10. 将 $2 变量的类型设置为绝对(对于 delta 为 2)

snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.4.1.2 integer 1
  1. 将 $3 变量的类型设置为绝对(对于 delta 为 2)
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.4.1.3 integer 1
  1. 将 expObjectTable 中的行设置为活动
snmpset -v2c -cstart123 172.0.0.1
 1.3.6.1.4.1.9.10.22.1.3.2.1.10.1.1 integer 1
  1. 将 expObjectTable 中的行设置为活动
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.10.1.2 integer 1
  1. 将 expObjectTable 中的行设置为活动
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.10.1.3 integer 1
  1. 激活表达式
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.2.3.1.3.101.49.101.120.112 integer 1

唯一的脚本:

snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.2.3.1.3.101.49.101.120.112 integer 6
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.2.3.1.3.101.49.101.120.112 integer 5
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.2.3.1.2.101.49.101.120.112 u 1
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.1.1.4.1 s "Expression MIB - IP SLA Probes ORing"
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.1.1.2.1 s '((($1 < 2) && ($1 > 0)) || (($2 < 2) && ($2 > 0)) || (($3 < 2) && ($3 > 0)))'
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.2.1.1 objectidentifier 1.3.6.1.4.1.9.9.42.1.5.1.1.6.3000
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.2.1.2 objectidentifier 1.3.6.1.4.1.9.9.42.1.5.1.1.6.3001
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.2.1.3 objectidentifier 1.3.6.1.4.1.9.9.42.1.5.1.1.6.3002
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.4.1.1 integer 1
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.4.1.2 integer 1
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.4.1.3 integer 1
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.10.1.1 integer 1
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.10.1.2 integer 1
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.3.2.1.10.1.3 integer 1
snmpset -v2c -cstart123 172.0.0.1 1.3.6.1.4.1.9.10.22.1.2.3.1.3.101.49.101.120.112 integer 1