はじめに
このドキュメントでは、転送の問題のデバッグに使用できる、ACIにネイティブに組み込まれているツールについて説明します。
背景説明
このドキュメントの内容は、『Troubleshooting Cisco Application Centric Infrastructure, Second Edition』の書籍、特に「Intra-Fabric forwarding - Tools」の章から抜粋しています。
また、ELAMとFtriageの詳細な説明は、セッション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ステータスが「triggered」と表示されます。 トリガーされると、ELAMが無効になり、ダンプを収集して、スイッチASICがそのパケット/フレームに対して行っている膨大な数の転送の決定を分析できます。ELAMはASICレベルで実装され、スイッチ上のCPUやその他のリソースに影響を与えません。
このドキュメントの転送例では、フローで何が行われているかを検証する手段としてELAMを使用しています。例は、リーフCLIバージョンとELAMアシスタントアプリケーションの両方を示しています。
このガイドでは、第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で検出されると、statusの出力に「triggered」と表示されます。 ELAMがトリガーされると、「ereport」を使用してスイッチの転送決定の詳細を表示できます。 ACIバージョン4.2より前では、「report」を使用する必要があります。
ASIC
ELAM構文では、ASICを指定する必要があることに注意してください。ASICはスイッチモデルに依存しているため、次の表を参照して、指定するASICを決定してください。
ASICテーブル
スイッチ/ラインカードファミリ
|
Elam用ASIC
|
-EXスイッチ/LC
|
タイ
|
-FX(P)スイッチ/LC
|
ロック
|
-FX2スイッチ/LC
|
ロック
|
Cスイッチ(9364C、9332C)
|
ロック
|
-GXスイッチ
|
アプリケーション(APP)
|
-GX2スイッチ
|
チョ
|
-FX3スイッチ
|
ロック
|
ELAMトリガーの選択
CLIから実行する場合に理解しておく必要があるELAMのもう1つのコンポーネントは、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カプセル化を使用したVLEAFから)パケットをキャプチャするには、in-select 14を使用します。
ELAMトリガーのout-select
out-selectを使用すると、ELAMレポートに表示するルックアップ結果を制御できます。ほとんどの場合、out-select 0を使用できます。この値に含まれるほとんどの情報には、ルックアップの結果がパケット/フレームをドロップするかどうかのドロップベクトルが含まれています。
ELAMの結果を取得するために、ereportまたはreport detailの代わりにreportを使用すると、out-select 1にのみdrop vectorが表示されることに注意してください。ただし、常に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用の2つのファイルがあります。
- elam_<タイムスタンプ>.txt
- pretty_elam_<タイムスタンプ>.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

ElamAssistant – 詳細

また、ELAM Assistantを使用すると、送信元インターフェイスやVXLAN値など、より複雑な照合パラメータを簡単に使用できます。
優先順位
Triageは、ELAMの設定と解釈をエンドツーエンドで自動化することを目的としたAPIC CLIベースのツールです。このツールの前提は、ユーザが特定のフローと、そのフローが開始されるリーフを定義できることです。次に、このツールは各ノードでELAMを1つずつ実行し、フォワーディングフローを調べます。これは、パケットがどのパスを通るかが不明な大規模トポロジで特に役立ちます。
fTriageは、実行された各コマンドの出力を含む大きなログファイルを生成します。このファイルの名前は、fTriageの出力の最初の数行に表示されます。
トリアージが完了するまでに最大15分かかることがあります。
例
リーフ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 を実行すると、すべての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などのコントロールプレーンベースのトラフィックです。
オンデマンドのアトミックカウンタ
オンデマンドのアトミックカウンタは、特定のフロー内のパケットがリーフアップリンクに残され、別のリーフファブリックポートで受信されたときに、それらのパケットをカウントすることを目的としています。パケットが損失したか、過剰に受信されたかを細かく確認できます。