はじめに
このドキュメントでは、転送の問題のデバッグに使用できる、ACIにネイティブに組み込まれているツールについて説明します。
背景説明
このドキュメントの内容は、『Troubleshooting Cisco Application Centric Infrastructure, Second Edition』の書籍、特に「Intra-Fabric Forwarding - Tools」の章から抜粋したものです。
また、ELAMとFtriageの詳細な説明は、セッションBRKDCN-3900bのCiscoLive On-Demandライブラリにあります。
これらのツールは何に役立ちますか。
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仮想エッジなど)またはアップストリームスパインから着信するパケットには、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を使用する場合、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用の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
完全なfTriageヘルプは、APICでftriage —help を実行することで確認できます。
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などのコントロールプレーンベースのトラフィックです。
オンデマンドのアトミックカウンタ
オンデマンドのアトミックカウンタは、特定のフロー内のパケットがリーフアップリンクに残され、別のリーフファブリックポートで受信されたときにカウントすることを目的としています。パケットが損失したか、過剰に受信したかを細かく確認できる