Cisco IOS 和 NX-OS 软件 : Cisco IOS Embedded Event Manager (EEM)

用于的EEM Applet检测和清除PfR转发环路

2015 年 8 月 28 日 - 机器翻译
其他版本: PDFpdf | 英语 (2015 年 4 月 23 日) | 反馈

简介

本文描述在网络使用性能路由的嵌入式活动管理器(EEM) applet (PfR)通过多个博德中继(BR)优化流量。一些转发环路也被观察。applet用于为了收集数据,当环路被观察时和缓和转发环路的影响。

贡献用法布里斯Ducomble和Atri巴苏, Cisco TAC工程师。

先决条件

要求

本文档没有任何特定的要求。

使用的组件

本文档中的信息根据Cisco IOS软件该支持EEM版本4.0。

为了检查您的Cisco IOS版本支持的EEM版本,请使用此命令:

Router#sh event manager version | i Embedded
Embedded Event Manager Version 4.00
Router#

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。

背景信息

当PfR控制一数据流类别(TC),创建动态路由路线图/访问控制表(ACL)在BR。在BR的路由映射用对一选定退出的选定出口点,而在其他BR的一个路由映射指向内部接口(下一跳=选择BR)。

    

问题发生,当动态ACL没有适当地同步区别BR之间时例如(由于Bug)。

在此图片,重点在匹配所有IP信息包的TC被注定到172.16.1.0/24与DSCP EF。在此方案中,相关ACL条目删除从选定BR (增殖比2),但是不从BR-1。数据包在增殖比2的该TC命中数与匹配所有IP信息包的前缀条目被注定了到172.16.1.0/24。前缀条目的选定退出是Exit-1,如此在增殖比2点的相关route-map /ACL对BR-1。

   

数据包该TC当前循环在BR之间,直到存活时间(TTL)到达0。

本文提供使用的必要的EEM applet为了:

  • 检测在BR之间的一转发环路
  • 收集了相关信息并且清除PfR

applet使用一旦组合一个的主令控制器(MC) /BR是更加容易(当MC在其中一运行BR)时。与专用的MCs的方案也报道。

EEM Applet详细信息

此部分描述用于此进程,以及Applet日志文件的访问列表。

使用的访问列表

为了检测转发环路, applet依靠ACL匹配有低的TTL数据包。

注意:聚合服务路由器(ASR) 1000系列版本3.7s (15.2(4)S)支持匹配在TTL的ACL和以后。

推荐使用匹配在2x的ACE连续,相对低, TTL值(20和21)为了获得一(和仅一个)点击为每数据包该在BR之间的环路。使用的TTL值不应该是太低为了避免从Traceroute信息包的常见的命中数。

interface gig0/0 (internal interface)
 ip access-group LOOP in
!
ip access-list extended LOOP
 permit ip 10.116.48.0 0.0.31.255 any ttl range 20 21
 permit ip any any

在报告的内部接口应该安置ACL在显示pfr主控边界拓扑命令输出中。

来源IP范围(此处10.116.48.0/20)应该匹配内部网络(前缀可及的通过内部接口)。

注意:如果不能汇总在一个访问列表条目(ACE)的内部网络,您能使用几ACE;然而,需要轻微修改脚本为了检查在几条线路的命中数计数。

注意自动隧道功能需要被关闭(在重要的PfR模式的没有模式自动隧道)。如果BR没有直接地连接,必须创建手工的通用路由封装(GRE)隧道,并且ACL放置在隧道接口。

为了识别哪远程site/TC由环路影响,您能添加秒钟ACL出站在接口,与每远程的site/TC更加特定的ACE。

interface gig0/0 (internal interface)
 ip access-group LOOP-DETAIL out

!
ip access-list extended LOOP-DETAIL

permit ip 10.116.48.0 0.0.31.255 10.116.132.0 0.0.0.255 ttl range 20 21
permit ip 10.116.48.0 0.0.31.255 10.116.128.0 0.0.0.255 ttl range 20 21
  .... (add here one line per remote site)
permit ip any an

目的地IP在不同的远程站点匹配子网:

10.116.132.0/24 -> site-1
10.116.128.0/24 -> site-2

如果环路,需要识别确切的TC影响的您能也添加几条线路每个远程站点。

Applet责任

applet检查匹配在ACL环路的TTL的ACE的hitcounts每三十秒。基于这些检查结果, applet也许执行这些任务:

  • 如果hitcounts超出配置的阈值(THRESHOLD_1), applet在十五秒清除ACL计数并且复校hitcounts。
  • 在十五秒之后,如果hitcounts在秒钟阈值(THRESHOLD_2)上,也许有环路。您必须收集一套输出和清除PfR为了解决环路问题。 
  • 第二阈值定义作为全局变量,因此他们容易地被调整,不用applet重新启动。
  • 这些阈值的最佳值主要取决于平均信息包速率每个TC。

Applet日志文件

applet维护记录hitcounts数量的日志文件(当计数比0极大)时和临时环路所有遭遇(当THRESHOLD_1没有被超出,但是没有THRESHOLD_2)时或一条实时环路(当THRESHOLD_1和THRESHOLD_2被超出)。

组合的MC/BR和其他BR方案的Applet

这些是在本文描述的简单情况。环检测和PfR清洁在同一个设备完成,那么那里是没有需要输入设备EEM applet通信。一分开的applet在组合的MC/BR和其他BR运行。

在组合的MC/BR的Applet

此输出显示在MC/BR使用的applet的重要信息组合。这是此特定输出的一些重要提示:

  • THRESHOLD_1显示的值是1000,并且为THRESHOLD_2显示的值是500。这暗示applet启动,如果环路影响的TC的速率高于1000/30 (33 pps)。
  • 磁盘变量识别日志和输出文件推送的地方(显示此处在Bootflash)。
  • 条目时间戳在日志文件的从show clock命令输出派生。字符在中部(显示此处作为“est”)取决于时区,并且必须调节(请参阅操作240)。
  • 必须在环路的情况下收集的输出在Bootflash的脚本输出xxxxxxx文件推送, “xxxxxx”是秒钟数量自1970年以来(过去常常做唯一文件名对于每环路出现)。
  • 收集的命令在操作330, 340, 350和360列出。一些进一步/不同的命令可以被添加。
event manager environment THRESHOLD_1 1000
event manager environment THRESHOLD_2 500
event manager environment DISK bootflash

!
event manager applet LOOP-MON authorization bypass
 event timer watchdog name LOOP time 30
 action 100 cli command "enable"
 action 110 cli command "show ip access-list LOOP"
 action 120 set regexp_substr 0
 action 130 regexp "range 20 21 \(([0-9]+) matches\)"
 $_cli_result _regexp_result regexp_substr
 action 140 cli command "clear ip access-list counters LOOP"
 action 150 if $regexp_substr gt 0
 action 200 set MATCHES $regexp_substr
 action 210 file open LOGS $DISK:script-logs.txt a
 action 220 cli command "enable"
 action 230 cli command "show clock"
 action 240 regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+ est [A-Za-z]+
  [A-Za-z]+ [0-9]+ 201[0-9]" $_cli_result _regexp_result

 action 250 set TIME $_regexp_result
 action 260 if $MATCHES gt $THRESHOLD_1
 action 270 wait 15
 action 280 cli command "show ip access-list LOOP"
 action 290 set regexp_substr 0
 action 300 regexp "range 20 21 \(([0-9]+) matches\)"
  $_cli_result _regexp_result regexp_substr
 action 310 if $regexp_substr gt $THRESHOLD_2
 action 320 cli command "enable"
 action 330 cli command "show ip access-list LOOP-DETAIL
  | tee /append $DISK:script-output-$_event_pub_sec.txt"
 action 340 cli command "show pfr master traffic-class perf det
  | tee /append $DISK:script-output-$_event_pub_sec.txt"
 action 350 cli command "show route-map dynamic detail
  | tee /append $DISK:script-output-$_event_pub_sec.txt"
 action 360 cli command "show ip route
  | tee /append $DISK:script-output-$_event_pub_sec.txt"

 action 370 cli command "clear pfr master *"
 action 380 cli command "clear ip access-list counters LOOP-DETAIL"
 action 390 file puts LOGS "$TIME - LOOP DETECTED - PfR CLEARED -
  matches $MATCHES > $THRESHOLD_1 and $regexp_substr
> $THRESHOLD_2 - see $DISK:script-output-$_event_pub_sec.txt"
 action 400 syslog priority emergencies msg "LOOP DETECTED -
  PfR CLEARED - see $DISK:script-output-$_event_pub_sec.txt !"
 action 410 else
 action 420 file puts LOGS "$TIME - TEMPORARY LOOP : matches
  $MATCHES > $THRESHOLD_1 and $regexp_substr < or = $THRESHOLD_2"
 action 430 cli command "clear ip access-list counters LOOP-DETAIL"
 action 440 end
 action 450 else
 action 460 cli command "en"
 action 470 cli command "clear ip access-list counters LOOP-DETAIL"
 action 480 file puts LOGS "$TIME - number of matches =
  $MATCHES < $THRESHOLD_1"
 action 490 end
 action 500 else
 action 510 cli command "clear ip access-list counters LOOP-DETAIL"
 action 520 end

其他BR的Applet

此部分描述用于其他BR的applet。这是此特定输出的一些重要提示:

  • 当在组合的MC/BR的脚本运行每三十秒时, applet运行每二十秒。这保证在BR启动的applet,在PfR通过在MC/BR运行的applet前被清除。
  • 使用一唯一阈值,那么那里是没有需要避免故障正。
  • 阈值显示的值是700,并且应该根据THRESHOLD_1值设置在MC/BR applet里。
  • applet日志文件在flash0的script-logs.txt文件推送。这在操作170磁盘变量可以更改。
  • 条目时间戳在日志文件的从show clock命令输出派生。字符在中部(显示此处作为“est”)取决于时区,并且必须调节(请参阅操作190)。
  • 必须在环路的情况下收集的输出在脚本输出xxxxxxx文件推送, “xxxxxx”是秒钟数量自1970年以来(过去常常做唯一文件名对于每环路出现)。
  • 收集的命令在操作230操作240列出。一些进一步/不同的命令可以被添加。
event manager environment THRESHOLD 700
event manager environment DISK flash 0

!
event manager applet LOOP-BR authorization bypass
  event timer watchdog name LOOP time 20
 action 100 cli command "enable"
 action 110 cli command "show ip access-list LOOP"
 action 120 set regexp_substr 0
 action 130 regexp "range 20 21 \(([0-9]+) matches\)"
  $_cli_result _regexp_result regexp_substr
 action 140 cli command "clear ip access-list counters LOOP"
 action 150 if $regexp_substr gt 0
 action 160  set MATCHES $regexp_substr
 action 170  file open LOGS $DISK:script-logs.txt a
 action 180  cli command "show clock"
 action 190  regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+
  est [A-Za-z]+ [A-Za-z]+ [0-9]+ 201[0-9]" $_cli_result _regexp_result

 action 200  set TIME $_regexp_result
 action 210  if $MATCHES gt $THRESHOLD
 action 220   cli command "enable"
 action 230   cli command "show route-map dynamic detail | tee /append
  $DISK:script-output-$_event_pub_sec.txt"
 action 240   cli command "show ip route | tee /append
  $DISK:script-output-$_event_pub_sec.txt"
 action 250   file puts LOGS "$TIME : matches = $MATCHES >
  $THRESHOLD - see $DISK:script-output-$_event_pub_sec.txt"
 action 260   syslog priority emergencies msg "LOOP DETECTED -
  Outputs captured - see $DISK:script-output-$_event_pub_sec.txt !"
 action 270  else
 action 280   file puts LOGS "$TIME : matches = $MATCHES < or = $THRESHOLD"
 action 290  end
 action 300 end  

专用的MC方案的Applet

环检测和PfR清洁/统计收集在必须有相互设备EEM applet通信的不同的设备完成。设备之间的通信发生用不同的方式。本文通过被跟踪的对象描述设备通信为了检查在IGP通告的专用的环回的可接通性。当事件检测时,环回被关闭,允许在远程设备的applet启动,当被跟踪时的对象脱机。若不同您能使用不同的环回信息需求交换。

Applet通信

使用这些applet和通信方法:

Applet名称在哪里?什么?触发?通信?
LOOP-BRBR

检查ACL hitcounts为了检测环路

定期关闭的Loop100
LOOP-MCMC-收集的PfR信息
-清除PfR
跟踪可接通性Loop100关闭的Loop200
COLLECT-BRBR收集的信息跟踪可接通性Loop200


 

这是说明此的镜像:

这是applet使用的进程:

  1. 环路由在BR的LOOP-BR applet检测。假设,环路在增殖比2首先检测。
  2. applet关闭在增殖比2的Loop100,并且信息在内部网关路由协议(IGP)通告。
  3. 增殖比2 Loop100的被跟踪的对象在MC脱机,并且LOOP-MC applet开始。PfR掌握输出收集,并且在MC的环回200被关闭。信息在IGP通告。一个十秒钟睡眠计时器开始。
  4. Loop200的被跟踪的对象在MC在两BR脱机。这触发收集BR特定信息的COLLECT-BR applet。
  5. 睡眠计时器(步骤3)开始,并且MC清除PfR。

注意:如果BR-1检测环路,在清除前PfR,脱机的被跟踪的对象在MC忽略(LOOP-MC applet一次运行一分钟)。

创建跟踪对象和环回

此部分描述如何创建环回(请保证IP通告在IGP)和跟踪对象。

跟踪对象

这是要记住的一些重点,当您创建跟踪对象时:

  • 一个单磁道对象在BR必要,用于为了跟踪在MC (此触发数据收集)的loopback200
  • 几个跟踪对象在MC必要:
    • 跟踪1和2用于为了跟踪在BR-1和增殖比2的loopback100,分别。
    • 跟踪11和12用于为了跟踪BR-1和增殖比2之间的连接,分别(避免PfR清洁,当有在BR之间的连通性问题)时。
    • 跟踪20跟踪逻辑和在跟踪11和12之间。这用于为了验证该MC获得可接通性到所有BR。
  • 跟踪计时器ip route值设置为一秒钟为了加速连通性问题检测(默认值是15秒)。 

BR-1

interface Loopback100
  ip address 10.100.100.1 255.255.255.255
!
track timer ip route 1
track 1 ip route 10.100.100.200 255.255.255.255 reachability

增殖比2

interface Loopback100
ip address 10.100.100.2 255.255.255.255
!
track timer ip route 1
track 1 ip route 10.100.100.200 255.255.255.255 reachability

MC

interface Loopback200
ip address 10.100.100.200 255.255.255.255
!
track timer ip route 1

track 1 ip route 10.100.100.1 255.255.255.255 reachability
track 2 ip route 10.100.100.2 255.255.255.255 reachability
track 11 ip route 10.116.100.1 255.255.255.255 reachability
track 12 ip route 10.116.100.2 255.255.255.255 reachability
track 20 list boolean and
 object 11
 object 12

BR和MC环回

LOOP-BR

此部分描述如何创建在BR的环回。这是要记住的一些重要提示:

  • THRESHOLD_1值是1000,并且THRESHOLD_2值是500。这暗示applet启动,如果环路影响的TCs的速率高于1000/30 (33个p/s)。
  • applet日志文件在Bootflash的script-detect-logs.txt文件推送。这更改在操作210和与磁盘变量。
  • 条目时间戳在日志文件的从sh clock输出派生。字符在中部(显示作为‘est’)取决于时区并且要求调整(操作240)。
  • 在您结束Loopback100为了notifiy MC后,请等五秒(为了保证IGP有时间传播信息)并且重新打开它(操作370)。
event manager environment THRESHOLD_1 100event manager environment 
  THRESHOLD_2 500event manager environment DISK bootflash

!event manager applet LOOP-BR authorization bypass

 event timer watchdog name LOOP time 30 maxrun 27
 action 100 cli command "enable"
 action 110 cli command "show ip access-list LOOP"
 action 120 set regexp_substr 0
 action 130 regexp "range 20 21 \(([0-9]+) matches\)"
  $_cli_result _regexp_result regexp_substr
 action 140 cli command "clear ip access-list counters LOOP"
 action 150 if $regexp_substr gt 0
 action 200  set MATCHES $regexp_substr
 action 210  file open LOGS $DISK:script-detect-logs.txt a
 action 220  cli command "enable"
 action 230  cli command "show clock"
 action 240  regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+
  est [A-Za-z]+ [A-Za-z]+ [0-9]+ 201[0-9]"
  $_cli_result _regexp_result

 action 250  set TIME $_regexp_result
 action 260  if $MATCHES gt $THRESHOLD_1
 action 270  wait 15
 action 280  cli command "show ip access-list LOOP"
 action 290  set regexp_substr 0
 action 300  regexp "range 20 21 \(([0-9]+) matches\)"
  $_cli_result _regexp_result regexp_substr
 action 310  if $regexp_substr gt $THRESHOLD_2
 action 320  cli command "enable"
 action 330  cli command "conf t"
 action 340  cli command "interface loop100"
 action 350  cli command "shut"
 action 360  file puts LOGS "$TIME - LOOP DETECTED - Message sent to MC -
  matches $MATCHES > $THRESHOLD_1 and $regexp_substr > $THRESHOLD_2"
 action 370  wait 5
 action 375  cli command "enable"
 action 380  cli command "conf t"
 action 390  cli command "interface loop100"
 action 400  cli command "no shut"
 action 410  else
 action 420  file puts LOGS "$TIME - TEMPORARY LOOP : matches $MATCHES >
$THRESHOLD_1 and $regexp_substr < or = $THRESHOLD_2"
 action 430  cli command "clear ip access-list counters LOOP-DETAIL"
 action 440  end
 action 450  else
 action 460  cli command "en"
 action 470  cli command "clear ip access-list counters LOOP-DETAIL"
 action 480  file puts LOGS "$TIME - number of matches =
  $MATCHES < $THRESHOLD_1"
 action 490  end
 action 500 else
 action 510  cli command "clear ip access-list counters LOOP-DETAIL"
 action 520 end

LOOP-MC

此部分描述如何创建在MC的环回。这是要记住的一些重要提示:

  • ratelimit值取决于applet多频繁以ratelimit值为60运行(脚本一次每最大的分钟运行)。当同一条环路由两BR时,检测这用于为了避免两次清除的PfR。
  • 操作两秒,在您检查可接通性对所有BR前, 130,请等待。这是为了避免在MC和BR之间的连通性问题造成的错误肯定。
  • 操作240,请等待十秒,在您关闭Loopback200后,在您清除PfR前。这是为了确保, BR有时间收集数据。
event manage environment DISK bootflash
event manager applet LOOP-MC authorization bypass

event syslog pattern "10.100.100.[0-9]/32 reachability Up->Dow" ratelimit 60
action 100 file open LOGS $DISK:script-logs.txt a
 action 110 regexp "10.100.100.[0-9]" "$_syslog_msg" _regexp_result
 action 120 set BR $_regexp_result
 action 130 wait 2
 action 140 track read 20
 action 150 if $_track_state eq "up"
 action 160  cli command "enable"
 action 170  cli command "show clock"
 action 180  regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+
  est [A-Za-z]+ [A-Za-z]+ [0-9]+ 201[0-9]"
  "$_cli_result" _regexp_result
 action 190  set TIME "$_regexp_result"
 action 200  cli command "show pfr master traffic-class perf det
  | tee /append $DISK:script-output-$_event_pub_sec.txt"
 action 210  cli command "conf t"
 action 220  cli command "interface loop200"
 action 230  cli command "shut"
 action 240  wait 10
 action 250  cli command "conf t"
 action 260  cli command "interface loop200"
 action 270  cli command "no shut"
 action 280  cli command "end"
 action 290  cli command "clear pfr master *"
 action 300  file puts LOGS "$TIME - LOOP DETECTED by $BR -
  PfR CLEARED - see $DISK:script-output-$_event_pub_sec.txt"
action 310  syslog priority emergencies msg "LOOP DETECTED by $BR -
  PfR CLEARED - see $DISK:script-output-$_event_pub_sec.txt !"
 action 320 else
 action 330  file puts LOGS "$TIME - REACHABILITY LOST with
$BR - REACHABILITY TO ALL BRs NOT OK - NO ACTION"
 action 340 end

COLLECT-BR

此部分描述如何收集BR。applet启动在,当BR疏松可接通性对Loopback200 (10.100.100.200)在MC。用于的命令为了收集在操作120130140列出。

event manager environment DISK bootflash
event manager applet COLLECT-BR authorization bypass

event syslog pattern "10.100.100.200/32 reachability Up->Dow" ratelimit 45
 action 100 file open LOGS $DISK:script-collect-logs.txt a
 action 110 cli command "enable"
 action 120 cli command "sh ip access-list LOOP-DETAIL |
tee /append $DISK:script-output-$_event_pub_sec.txt"
 action 130 cli command "show route-map dynamic detail
  | tee /append
$DISK:script-output-$_event_pub_sec.txt"
 action 140 cli command "show ip route | tee /append
  $DISK:script-output-$_event_pub_sec.txt"
 action 150 cli command "show clock"
 action 160 regexp "[0-9]+:[0-9]+:[0-9]+.[0-9]+ CET [A-Za-z]+ [A-Za-z]+
  [0-9]+ 201[0-9]" "$_cli_result" _regexp_result
 action 170 set TIME "$_regexp_result"
 action 180 file puts LOGS "$TIME - OUTPUTs COLLECTED -
  see $DISK:script-output-$_event_pub_sec.txt"

SYSLOG-MC

这是在MC的Syslog,当环路检测时:

MC#
*Mar  8 08:52:12.529: %TRACKING-5-STATE: 1 ip route 10.100.100.1/32
 reachability Up->Down
MC#
*Mar  8 08:52:16.683: %LINEPROTO-5-UPDOWN:
 Line protocol on Interface Loopback200, changed state to down
*Mar  8 08:52:16.683: %LINK-5-CHANGED: Interface Loopback200,
 changed state to administratively down
MC#
*Mar  8 08:52:19.531: %TRACKING-5-STATE: 1
 ip route 10.100.100.1/32 reachability Down->Up
MC#
*Mar  8 08:52:24.727: %SYS-5-CONFIG_I: Configured from console by
  on vty0 (EEM:LOOP-MC)
*Mar  8 08:52:24.744: %PFR_MC-1-ALERT: MC is inactive due to PfR
 minimum requirements not met;
 Less than two external interfaces are operational
MC#
*Mar  8 08:52:24.757: %HA_EM-0-LOG: LOOP-MC:
 LOOP DETECTED by 10.100.100.1 - PfR CLEARED
 - see unix:script-output-1362732732.txt !
MC#
*Mar  8 08:52:26.723: %LINEPROTO-5-UPDOWN:
 Line protocol on Interface Loopback200, changed state to up
MC#
*Mar  8 08:52:26.723: %LINK-3-UPDOWN: Interface Loopback200,
 changed state to up
MC#
*Mar  8 08:52:29.840: %PFR_MC-5-MC_STATUS_CHANGE: MC is UP
*Mar  8 08:52:30.549: %TRACKING-5-STATE: 2
 ip route 10.100.100.2/32 reachability Up->Down
MC#
*Mar  8 08:52:37.549: %TRACKING-5-STATE: 2
 ip route 10.100.100.2/32 reachability Down->Up
MC#

注意:这些applet可以与与若干调整的三个或多个BR一起使用。


相关的思科支持社区讨论

思科支持社区是您提问、解答问题、分享建议以及与工作伙伴协作的论坛。


Document ID: 116206