简介
本文档介绍ACI中本地包含的用于调试转发问题的工具。
背景信息
本文档中的内容摘自思科以应用为中心的基础设施故障排除,第二版书籍,尤其是交换矩阵内转发-工具一章。
此外,有关ELAM和Futriage的更详细说明,请参阅BRKDCN-3900b会话中的CiscoLive点播库。
这些工具可以帮您做什么?
为了从ACI的角度对转发问题进行故障排除,请了解:
- 哪台交换机正在接收流?
- 该交换机做出了什么转发决策?
- 交换机是否正在丢弃它?
ACI包括多种工具,使用户能够深入了解特定流发生的情况。接下来的几节将详细介绍这些工具,因此此处仅作简要介绍。
SPAN和ERSPAN
SPAN和ERSPAN都是允许将特定位置收到的所有或部分流量复制到另一个位置的工具。发送复制流量的终端设备应运行某种类型的数据包嗅探器/分析器应用。传统SPAN涉及复制一个端口上接收的流量以及通过另一个端口传出的流量。除ERSPAN外,ACI还支持这样做。
ERSPAN遵循相同的概念,除了从本地端口复制流量外;复制流量封装在GRE中并发送到远程目标。在ACI中,此ERSPAN目标只能作为第3层终端学习,并且可以是任何VRF中的任何EPG。
建议始终将SPAN目标连接到交换矩阵,以尽量减少故障排除过程中的准备时间,并允许快速配置和捕获ERSPAN会话。
ELAM
概述
嵌入式逻辑分析器模块(ELAM)是一种工具,允许用户在硬件中设置条件并捕获与设置条件匹配的第一个数据包或帧。成功捕获会导致ELAM状态显示为“已触发”。 一旦触发,ELAM将被禁用,并且可收集转储来分析交换机ASIC使用该数据包/帧做出的大量转发决策。ELAM在ASIC级别实施,不会影响交换机上的CPU或其他资源。
本书中的转发示例使用ELAM来验证流中发生的情况。示例显示了枝叶CLI版本和ELAM Assistant应用。
本指南不涵盖第一代枝叶交换机(没有EX、FX或FX2后缀的交换机)上ELAM的使用。
在使用工具之前,必须了解命令语法的结构。
枝叶CLI上的示例:
vsh_lc [This command enters the line card shell where ELAMs are run]
debug platform internal <asic> elam asic 0 [refer to the ASICs table]
将条件设置为“触发”
trigger reset [ensures no existing triggers are running]
trigger init in-select <number> out-select <number> [determines what information about a packet is displayed and which conditions can be set]
set outer/inner [sets conditions]
start [starts the trigger]
status [checks if a packet is captured]
生成包含数据包分析的转储
ereport [display detailed forwarding decision for the packet]
继续输入status命令以查看触发器的状态。在ASIC上检测到与所定义条件匹配的数据包后,status的输出会显示“triggered”。 触发ELAM后,可使用“ereport”显示交换机转发决策的详细信息。在ACI版本4.2之前,必须使用“报告”。
ASIC
在ELAM语法中,请注意必须指定ASIC。由于ASIC取决于交换机型号,请参阅下表确定要指定哪个ASIC:
ASIC表
交换机/线卡系列 |
适用于Elam的ASIC |
-EX交换机/LC |
TAH |
-FX(P)交换机/LC |
中华民国 |
-FX2交换机/LC |
中华民国 |
C交换机(9364C、9332C) |
中华民国 |
-GX交换机 |
应用 |
-GX2交换机 |
赵 |
-FX3交换机 |
中华民国 |
ELAM Trigger in-select
当从CLI运行时,必须了解的ELAM的另一个组件是in-select。in-select定义数据包/帧预期具有哪些报头,以及要匹配哪些报头。
例如,来自非VXLAN封装的下行链路端口的数据包将只有外部第2层、第3层和第4层报头。
来自前面板(下行链路)端口且采用VXLAN封装的数据包(例如VXLAN模式下的思科ACI虚拟边缘)或来自上游主干的数据包将采用VXLAN封装。这意味着它可能同时具有外部和内部第2层、第3层和第4层报头。
所有触发器选项包括:
leaf1# vsh_lc
module-1# debug platform internal tah elam asic 0
module-1(DBG-elam)# trigger reset
module-1(DBG-elam)# trigger init in-select ?
10 Outerl4-innerl4-ieth
13 Outer(l2|l3|l4)-inner(l2|l3|l4)-noieth
14 Outer(l2(vntag)|l3|l4)-inner(l2|l3|l4)-ieth
15 Outer(l2|l3|l4)-inner(l2|l3|l4)-ieth
6 Outerl2-outerl3-outerl4
7 Innerl2-innerl3-innerl4
8 Outerl2-innerl2-ieth
9 Outerl3-innerl3
如果选择了in-select 6,则唯一的选项是设置条件和显示来自外部第2层、第3层或第4层报头的报头。如果选择了in-select 14,则唯一的选项是为外部和内部第2层、第3层和第4层报头设置条件和查看其详细信息。
最佳实践说明:
要捕获下行链路端口上带有VLAN封装的数据包,请使用“in-select 6”
要使用VXLAN封装捕获数据包(从主干或使用VXLAN封装的vleaf)请使用in-select 14。
ELAM Trigger out-select
out-select可以控制在ELAM报告中显示哪些查找结果。由于包含大多数信息(包括丢弃矢量),因此对于大多数的实际情况,可以使用out-select 0,该矢量可告知查找结果是否是将数据包/帧丢弃。
请注意,当report而不是ereport或report detail用于获取ELAM结果时,drop vector仅显示在out-select 1中。但是,可以随时使用out-select 0执行ereport或report detail。
ELAM设置条件
ELAM支持要在数据包中查找的大量第2层、第3层和第4层条件。指定inner与outer将确定能否在内部报头(VXLAN封装数据包)或外部报头中检查条件。
ARP示例
set outer arp source-ip-address 10.0.0.1 target-ip-address 10.0.0.2
MAC地址示例:
set outer l2 src_mac aaaa.bbbb.cccc dst_mac cccc.bbbb.aaaa
内部报头中的IP地址示例:
set inner ipv4 src_ip 10.0.0.1 dst_ip 10.0.0.2
查看ELAM报告
验证ELAM已触发并显示status:
module-1(DBG-elam-insel6)# status
ELAM STATUS
===========
Asic 0 Slice 0 Status Armed
Asic 0 Slice 1 Status Triggered
ereport可用于以易于理解的格式显示ELAM的结果。请注意,ELAM报告保存在交换机的/var/log/dme/log/文件夹中。文件夹下有ELAM的两个文件。
- elam_<timestamp>.txt
- pretty_elam_<timestamp>.txt
完整的ELAM示例
此示例将捕获来自-EX交换机上的下行链路端口的非VXLAN封装流量(在外部报头上进行匹配):
module-1# debug platform internal tah elam asic 0
module-1(DBG-elam)# trigger reset
module-1(DBG-elam)# trigger init in-select 6 out-select 0
module-1(DBG-elam-insel6)# set outer ipv4 src_ip 10.0.0.1 dst_ip 10.0.0.2
module-1(DBG-elam-insel6)# start
module-1(DBG-elam-insel6)# status
module-1(DBG-elam-insel6)# ereport
ELAM助理应用程序
本书中的故障排除示例还显示了可通过思科DC应用中心(https://dcappcenter.cisco.com)下载的ELAM Assistant应用的用法。此工具通过APIC上的GUI自动部署和解释ELAM。
本示例显示匹配节点101下行链路端口上特定源和目标IP的ELAM的部署
ElamAssistant
ElamAssistant -详细信息
ELAM Assistant还允许轻松使用更复杂的匹配参数,例如源接口或VXLAN值。
分类
fTriage是基于APIC CLI的工具,旨在提供ELAM配置和解释的端到端自动化。该工具的前提是用户可以定义特定流以及预期流开始的枝叶。然后,该工具在每个节点上逐个执行ELAM,以检查转发流。在不清楚数据包采用哪条路径的大型拓扑中,它特别有用。
fTriage会生成一个大型日志文件,其中包含执行的每个命令的输出。此文件的名称显示在fTriage输出的前几行中。
完成fTriage最多可能需要15分钟。
Examples
从枝叶104开始,绘制10.0.1.1和10.0.2.1之间路由通信的流程:
ftriage route -ii LEAF:104 -dip 10.0.2.1 -sip 10.0.1.1
从枝叶104开始映射第2层流:
ftriage bridge -ii LEAF:104 -dmac 02:02:02:02:02:02
通过运行ftriage — APIC上的帮助,可以查看完整的fTriage帮助。
tcpdump
tcpdump可用于ACI交换机,以捕获控制平面之间的流量。请注意,在tcpdump捕获中可以观察到仅发送到交换机CPU的控制平面流量。例如:路由协议、LLDP/CDP、LACP、ARP等。要捕获数据平面(和控制平面)流量,请使用SPAN和/或ELAM。
要在CPU上捕获,请指定kpm_inb接口。 大多数传统tcpdump选项和过滤器可供使用。
在枝叶交换机上捕获发往SVI的ICMP的示例:
leaf205# tcpdump -ni kpm_inb icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on kpm_inb, link-type EN10MB (Ethernet), capture size 65535 bytes
20:24:12.921981 IP 10.0.2.100 > 10.0.2.1: ICMP echo request, id 62762, seq 4096, length 64
20:24:12.922059 IP 10.0.2.1 > 10.0.2.100: ICMP echo reply, id 62762, seq 4096, length 64
20:24:13.922064 IP 10.0.2.100 > 10.0.2.1: ICMP echo request, id 62762, seq 4352, length 64
20:24:13.922157 IP 10.0.2.1 > 10.0.2.100: ICMP echo reply, id 62762, seq 4352, length 64
20:24:14.922231 IP 10.0.2.100 > 10.0.2.1: ICMP echo request, id 62762, seq 4608, length 64
20:24:14.922303 IP 10.0.2.1 > 10.0.2.100: ICMP echo reply, id 62762, seq 4608, length 64
此外,通过-w选项,tcpdump可以将数据包捕获写入PCAP文件,以便可以在Wireshark等工具中打开该文件。
在eth0接口(交换机上的带外接口)上使用tcpdump。这对于排除通过交换机带外物理端口的任何流量的连接故障非常有用。这主要是基于控制平面的流量,例如SSH、SNMP等。
按需的原子计数器
按需原子计数器旨在对特定流中离开枝叶上行链路并在另一个枝叶交换矩阵端口上接收的数据包进行计数。它们可以对数据包是否丢失或超量接收进行一定的精细化。