简介
本文档介绍ACI中自带的、可用于调试转发问题的工具。
背景信息
本文档中的内容摘自 思科以应用为中心的基础设施故障排除(第二版) 书,特别是 交换矩阵内转发 — 工具 第章。
此外,有关ELAM和Ftriage的更多说明,请参阅会话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交换机 |
CHO |
-FX3交换机 |
中华民国 |
ELAM触发器内选
从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,因为它包含大多数信息,包括“drop vector”,它将会判断查找的结果是丢弃数据包/帧。
请注意,当使用“report”而不是“ereport”或“report detail”获取ELAM结果时,“drop vector”仅显示在“out-select 1”中。 但是,您可以始终执行“ereport”或“report detail”,并使用“out-select 0”。
ELAM设置条件
ELAM支持要在数据包中查找的大量第2、3和4层条件。指定“内部”与“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已触发状态:
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助理应用程序
本手册中的故障排除示例还将显示可通过Cisco DC App Center(https://dcappcenter.cisco.com)下载的ELAM Assistant应用的使用情况。 此工具通过APIC上的GUI自动部署和解释ELAM。
此示例显示匹配节点–101下行链路端口上特定源和目标IP的ELAM部署
ElamAssistant
![ELAM Assistant App](/c/dam/en/us/support/docs/cloud-systems-management/application-policy-infrastructure-controller-apic/217995-troubleshoot-aci-intra-fabric-forwarding-00.png)
ElamAssistant — 详细信息
![ELAM Assistant App](/c/dam/en/us/support/docs/cloud-systems-management/application-policy-infrastructure-controller-apic/217995-troubleshoot-aci-intra-fabric-forwarding-01.jpeg)
ELAM Assistant还允许使用更复杂的匹配参数,如源接口或VXLAN值。
分类
fTriage是基于APIC CLI的工具,旨在提供ELAM配置和解释的端到端自动化。该工具的前提是用户可以定义特定流以及预期流开始的枝叶。然后,该工具将在每个节点上逐个执行ELAM,以检查转发流程。在不清楚数据包采用哪条路径的大型拓扑中,它尤其有用。
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
通过在APIC上运行“ftriage —help”,可以查看完整的分类帮助。
Tcpdump
可以在ACI交换机上利用TCPDUMP捕获进出控制平面的流量。请注意,在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等。
按需的原子计数器
按需原子计数器旨在对特定流中的数据包进行计数,因为它们离开枝叶上行链路并在另一个枝叶交换矩阵端口上接收。它们允许对数据包是否丢失或过量接收进行一定程度的细分。