소개
이 문서에서는 포워딩 문제를 디버그하는 데 사용할 수 있는 ACI에 기본적으로 포함된 툴에 대해 설명합니다.
배경 정보
이 문서의 자료는 Troubleshooting Cisco Application Centric Infrastructure, Second Edition 책, 특히 Intra-Fabric Fowarding - Tools 장에서 발췌했습니다.
또한 ELAM과 Attribute에 대한 자세한 설명은 세션 BRKDCN-3900b의 CiscoLive 온디맨드 라이브러리에서 확인할 수 있습니다.
이러한 툴이 어떤 도움을 줄 수 있습니까?
ACI 관점에서 포워딩 문제를 트러블슈팅하려면 다음을 이해합니다.
- 어떤 스위치에서 플로우를 수신합니까?
- 해당 스위치는 어떤 포워딩 결정을 내립니까?
- 스위치가 그것을 떨어뜨리고 있습니까?
ACI에는 사용자가 특정 흐름에서 일어나는 일에 대한 심층적인 통찰을 얻을 수 있는 몇 가지 툴이 포함되어 있습니다. 다음 섹션에서는 이러한 툴에 대해 자세히 설명합니다. 따라서 여기서는 대략적인 소개만 제공합니다.
SPAN 및 ERSPAN
SPAN과 ERSPAN은 모두 특정 위치에서 수신된 모든 트래픽 또는 일부 트래픽을 다른 위치로 복제할 수 있도록 하는 툴입니다. 복제된 트래픽을 전송하는 최종 디바이스는 일부 유형의 패킷 스니퍼/분석기 애플리케이션을 실행하고 있어야 합니다. 기존 SPAN에서는 한 포트에서 수신 중인 트래픽을 복제한 다음 다른 포트를 통해 전달합니다. ACI는 ERSPAN 외에도 이 작업을 지원합니다.
ERSPAN은 로컬 포트에서 트래픽을 복제하는 것을 제외하고 동일한 개념을 따릅니다. 복제된 트래픽은 GRE에서 캡슐화되어 원격 대상으로 전송됩니다. ACI에서는 이 ERSPAN 대상을 레이어 3 엔드포인트로만 학습해야 하며 모든 VRF의 모든 EPG가 될 수 있습니다.
문제 해결 중에 준비 시간을 최소화하고 ERSPAN 세션 구성 및 캡처를 신속하게 수행할 수 있도록 항상 SPAN 대상을 패브릭에 연결하는 것이 좋습니다.
엘람
개요
ELAM(Embedded Logic Analyzer Module)은 사용자가 하드웨어에서 조건을 설정하고 설정된 조건과 일치하는 첫 번째 패킷 또는 프레임을 캡처할 수 있도록 하는 툴입니다. 캡처가 성공하면 ELAM 상태가 "트리거됨"으로 표시됩니다. 일단 트리거되면 ELAM이 비활성화되고 덤프를 수집하여 스위치 ASIC가 해당 패킷/프레임으로 내리는 수많은 포워딩 결정을 분석할 수 있습니다. ELAM은 ASIC 레벨에서 구현되며 스위치의 CPU 또는 기타 리소스에 영향을 주지 않습니다.
이 설명서의 포워딩 예에서는 플로우의 현재 상황을 확인하기 위한 수단으로 ELAM을 사용합니다. 예에는 leaf CLI 버전 및 ELAM Assistant App이 모두 나와 있습니다.
이 가이드에서는 1세대 리프 스위치(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에서 탐지되면 상태 출력에는 "트리거됨"이 표시됩니다. ELAM이 트리거되면 스위치 포워딩 결정에 대한 세부사항이 'ereport'로 표시될 수 있습니다. ACI 버전 4.2 이전에는 'report'를 사용해야 합니다.
ASIC
ELAM 구문 내에서 ASIC를 지정해야 합니다. ASIC는 스위치 모델에 따라 달라지므로, 이 표를 참조하여 어떤 ASIC를 지정할 것인지 결정하십시오.
ASIC 테이블
스위치/라인 카드 제품군 |
Elam용 Asic |
-EX 스위치/LC |
타 |
-FX(P) 스위치/LC |
ROC |
-FX2 스위치/LC |
ROC |
C 스위치(9364C,9332C) |
ROC |
-GX 스위치 |
앱 |
-GX2 스위치 |
조 |
-FX3 스위치 |
ROC |
ELAM 트리거 선택
CLI에서 실행할 때 반드시 알아야 하는 ELAM의 다른 구성 요소는 in-select입니다. in-select는 패킷/프레임에 포함해야 할 헤더와 일치시킬 헤더를 정의합니다.
예를 들어 VXLAN이 캡슐화되지 않은 다운링크 포트에서 오는 패킷은 외부 레이어 2, 레이어 3 및 레이어 4 헤더만 가질 수 있습니다.
VXLAN 캡슐화된 전면 패널(다운링크) 포트(예: VXLAN 모드의 Cisco ACI Virtual Edge)에서 오는 패킷 또는 업스트림 스파인에서 오는 패킷은 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 캡슐화를 통해) 패킷을 캡처하려면 in-select 14를 사용합니다.
ELAM 트리거 아웃-선택
out-select를 사용하면 어떤 조회 결과가 ELAM 보고서에 표시되는지 제어할 수 있습니다. 대부분의 실용적인 목적에서 삭제 벡터를 포함한 대부분의 정보가 포함되므로 out-select 0을 사용할 수 있습니다. 이 정보는 조회 결과가 패킷/프레임을 삭제하는 것인지 여부를 나타냅니다.
보고서 또는 보고서 세부사항 대신 보고서를 사용하여 ELAM 결과를 얻을 경우 드롭 벡터는 out-select 1에서만 표시됩니다는 점에 유의하십시오가 좋습니다. 그러나 out-select 0을 사용하여 항상 보고서를 수행하거나 세부사항을 보고할 수 있습니다.
ELAM 설정 조건
ELAM은 패킷에서 검색할 대규모 레이어 2, 3 및 4 조건을 지원합니다. 내부 헤더와 외부를 지정하면 내부 헤더(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
보고서를 사용하여 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 Assistant 애플리케이션
이 설명서의 트러블슈팅 예시에는 Cisco DC App Center(https://dcappcenter.cisco.com)를 통해 다운로드할 수 있는 ELAM Assistant 앱의 사용법도 나와 있습니다. 이 툴은 APIC의 GUI를 통해 ELAM의 구축 및 해석을 자동화합니다.
이 예에서는 node-101 다운링크 포트에서 특정 소스 및 목적지 IP와 일치하는 ELAM의 구축을 보여줍니다
ElamAssistant
ElamAssistant - 세부 정보
또한 ELAM Assistant를 사용하면 소스 인터페이스 또는 VXLAN 값과 같은 더 복잡한 일치 매개변수를 쉽게 사용할 수 있습니다.
분류
Triage는 ELAM 구성 및 해석의 엔드 투 엔드 자동화를 제공하기 위한 APIC CLI 기반 툴입니다. 이 툴의 전제는 사용자가 특정 플로우뿐만 아니라 플로우가 시작될 것으로 예상되는 리프를 정의할 수 있다는 것입니다. 그런 다음 각 노드에서 ELAM을 하나씩 실행하여 포워딩 플로우를 검토합니다. 이 기능은 패킷이 어떤 경로를 사용하는지 분명하지 않은 대규모 토폴로지에서 특히 유용합니다.
분류는 실행된 각 명령의 출력을 포함하는 큰 로그 파일을 생성합니다. 이 파일의 이름은 Triage 출력의 처음 몇 줄에 표시됩니다.
분류 완료는 최대 15분이 소요될 수 있습니다.
예
Leaf 104에서 시작하여 10.0.1.1과 10.0.2.1 사이의 라우티드 통신에 대한 흐름을 매핑합니다.
ftriage route -ii LEAF:104 -dip 10.0.2.1 -sip 10.0.1.1
Leaf 104에서 시작하는 레이어 2 플로우를 매핑합니다.
ftriage bridge -ii LEAF:104 -dmac 02:02:02:02:02:02
전체 분류 도움말은 APIC에서 ftriage —help를 실행하여 확인할 수 있습니다.
tcpdump
tcpdump는 ACI 스위치에서 활용하여 제어 평면을 오가는 트래픽을 캡처할 수 있습니다. tcpdump 캡처에서는 스위치 CPU로 전송되는 컨트롤 플레인 트래픽만 관찰될 수 있습니다. 예를 들면 라우팅 프로토콜, LLDP/CDP, LACP, ARP 등이 있습니다. 데이터 플레인(및 컨트롤 플레인) 트래픽을 캡처하려면 SPAN 및/또는 ELAM을 사용하십시오.
CPU에서 캡처하려면 kpm_inb 인터페이스를 지정합니다. 대부분의 기존 tcpdump 옵션 및 필터를 사용할 수 있습니다.
Leaf 스위치에서 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를 사용합니다. 이는 스위치의 OOB(Out of Band) 물리적 포트를 통과하는 모든 트래픽의 연결 문제를 해결하는 데 유용합니다. 이는 주로 SSH, SNMP 등과 같은 컨트롤 플레인 기반 트래픽입니다.
온디맨드 atomic 카운터
온디맨드 atomic 카운터는 leaf 업링크를 통해 나가고 다른 leaf 패브릭 포트에서 수신될 때 특정 흐름 내의 패킷을 카운트하기 위한 것입니다. 따라서 패킷이 누락되었는지 또는 초과 수신된 패킷인지 여부를 세부적으로 파악할 수 있습니다.