2018-07-05
01:17 PM
- 最終編集日:
2025-01-20
03:24 PM
、編集者:
JapanTAC_CSC
ELAM (Embedded Logic Analyzer Module) は、Cisco ASIC 内の packet 転送を確認するための Tool で、ACI 固有の Tool ではなく、一部の Catalyst や Nexus Series Switch 上でも動作します。 Nexus 9000 シリーズ製品: ELAM の概要 に、Standalone mode での使用方法や説明が記載されているので、ELAM についてはそちらの document もご参照ください。 ELAM の設定や出力は ASIC によって異なるため注意が必要です。
ELAM 設定を APIC GUI 上で設定できる Tool で、Cisco ACI App Center から download して使用することができます。
APIC Postman の紹介 に記載されている方法で install することができます。 ACI Apps を使用したことがない人は APIC Postman の紹介 もご参照ください。
ACI Fabric は、複数台の Leaf/Spine Switch によって構成されているため、packet が drop している箇所を特定するために、複数台の switch で ELAM capture を行う必要があり、各 switch に login して設定を行う必要がありますが、この Tool を使うことで、APIC 上で、複数台の switch に対して一度に設定を行うことができます。 また、ELAM Assistant が support している switch は、第二世代の (EX, FX, GX Series) switch になりますが、これら switch の ELAM 出力は、ASIC の内部構造を理解していないと読むことができない、難解な出力になっていますが、ELAM Assistant は、解析に必要な部分を human readable な形式に変換してくれるため、比較的簡単に結果を確認することができます。
例えば、下記のような出力は、
*** Parsed l2 vector hom_pr_lu_vec_l2v: 0x00000000000005DE100000000F4CFE237646DF4CFE237646F hom_pr_lu_vec_l2v.da: 0xF4CFE237646F hom_pr_lu_vec_l2v.da.trill: 0xF4CFE237646F hom_pr_lu_vec_l2v.da.trill.ce_da: 0xF4CFE237646F hom_pr_lu_vec_l2v.da.ce_da: 0xF4CFE237646F hom_pr_lu_vec_l2v.da.dce_da: 0xF4CFE237646F hom_pr_lu_vec_l2v.sa: 0xF4CFE237646D hom_pr_lu_vec_l2v.sa.trill: 0xF4CFE237646D hom_pr_lu_vec_l2v.sa.trill.irbid: 0x646D hom_pr_lu_vec_l2v.sa.trill.erbid: 0xE237 hom_pr_lu_vec_l2v.sa.trill.spare: 0xF4CF hom_pr_lu_vec_l2v.sa.ce_sa: 0xF4CFE237646D hom_pr_lu_vec_l2v.sa.dce_sa: 0xF4CFE237646D hom_pr_lu_vec_l2v.vntag_vld: 0x0 hom_pr_lu_vec_l2v.ivntag_vld: 0x0 hom_pr_lu_vec_l2v.vir: 0x0 hom_pr_lu_vec_l2v.vir.vntag: 0x0 hom_pr_lu_vec_l2v.vir.vntag.svif: 0x0 hom_pr_lu_vec_l2v.vir.vntag.dvif: 0x0 hom_pr_lu_vec_l2v.vir.vntag.e: 0x0 hom_pr_lu_vec_l2v.vir.vntag.l: 0x0 hom_pr_lu_vec_l2v.vir.vntag.p: 0x0 hom_pr_lu_vec_l2v.vir.vntag.dir: 0x0 hom_pr_lu_vec_l2v.vir.ivntag: 0x0 hom_pr_lu_vec_l2v.vir.ivntag.svif: 0x0 hom_pr_lu_vec_l2v.vir.ivntag.dvif: 0x0 hom_pr_lu_vec_l2v.vir.ivntag.pcp: 0x0 hom_pr_lu_vec_l2v.vir.ivntag.de: 0x0 hom_pr_lu_vec_l2v.qtag0_vld: 0x1 hom_pr_lu_vec_l2v.qtag0_cos: 0x0 hom_pr_lu_vec_l2v.qtag0_de: 0x0 hom_pr_lu_vec_l2v.qtag0_vlan: 0x2EF hom_pr_lu_vec_l2v.qtag1_vld: 0x0 hom_pr_lu_vec_l2v.qtag1_cos: 0x0 hom_pr_lu_vec_l2v.qtag1_de: 0x0 hom_pr_lu_vec_l2v.qtag1_vlan: 0x0 hom_pr_lu_vec_l2v.dce_vld: 0x0 hom_pr_lu_vec_l2v.trill_vld: 0x0 hom_pr_lu_vec_l2v.l2mp: 0x0 hom_pr_lu_vec_l2v.l2mp.dce: 0x0 hom_pr_lu_vec_l2v.l2mp.dce.ftag: 0x0 hom_pr_lu_vec_l2v.l2mp.dce.ttl: 0x0 hom_pr_lu_vec_l2v.l2mp.trill: 0x0 hom_pr_lu_vec_l2v.l2mp.trill.V: 0x0 hom_pr_lu_vec_l2v.l2mp.trill.R: 0x0 hom_pr_lu_vec_l2v.l2mp.trill.M: 0x0 hom_pr_lu_vec_l2v.l2mp.trill.oplen: 0x0 hom_pr_lu_vec_l2v.l2mp.trill.hopct: 0x0 hom_pr_lu_vec_l2v.cmd_vld: 0x0 hom_pr_lu_vec_l2v.cmd_sgt_vld: 0x0 hom_pr_lu_vec_l2v.cmd_sgt: 0x0 hom_pr_lu_vec_l2v.cmd_dgt_vld: 0x0 hom_pr_lu_vec_l2v.cmd_dgt: 0x0 hom_pr_lu_vec_l2v.cntag_vld: 0x0 hom_pr_lu_vec_l2v.snap_vld: 0x0 *** Parsed l3 vector hom_pr_lu_vec_l3v: 0x00000000000000000000000000C0A84B01000000000000000000000000C0A84B02AA3B01FF000000A8002A022 hom_pr_lu_vec_l3v.ce: 0x00000000000000000000000000C0A84B01000000000000000000000000C0A84B02AA3B01FF000000A8002A022 hom_pr_lu_vec_l3v.ce.l3_type: 0x2 hom_pr_lu_vec_l3v.ce.pyld_len: 0x4 hom_pr_lu_vec_l3v.ce.etype: 0xA8 hom_pr_lu_vec_l3v.ce.pyld: 0x302A12C0AA8EC07FC000002A0 hom_pr_lu_vec_l3v.ce.ce_spare: 0x000000000000000000000000302A12C040000000000000000 hom_pr_lu_vec_l3v.fc: 0x00000000000000000000000000C0A84B01000000000000000000000000C0A84B02AA3B01FF000000A8002A022 hom_pr_lu_vec_l3v.fc.l3_type: 0x2 hom_pr_lu_vec_l3v.fc.pyld_len: 0x4 hom_pr_lu_vec_l3v.fc.etype: 0xA8 hom_pr_lu_vec_l3v.fc.esof: 0x0 hom_pr_lu_vec_l3v.fc.r_ctl: 0x2A hom_pr_lu_vec_l3v.fc.d_id: 0xC00000 hom_pr_lu_vec_l3v.fc.cs_ctl: 0x7F hom_pr_lu_vec_l3v.fc.s_id: 0xAA8EC0 hom_pr_lu_vec_l3v.fc.fc_type: 0xC0 hom_pr_lu_vec_l3v.fc.f_ctl: 0x302A12 hom_pr_lu_vec_l3v.fc.df_ctl: 0x0 hom_pr_lu_vec_l3v.fc.ox_id: 0x0 hom_pr_lu_vec_l3v.fc.rx_id: 0x0 hom_pr_lu_vec_l3v.fc.pyld: 0x000302A12C040000000000000 hom_pr_lu_vec_l3v.fc.vft_vld: 0x0 hom_pr_lu_vec_l3v.fc.vft_type: 0x0 hom_pr_lu_vec_l3v.fc.vft_prio: 0x0 hom_pr_lu_vec_l3v.fc.vft_vfid: 0x0 hom_pr_lu_vec_l3v.fc.vft_hopct: 0x0 hom_pr_lu_vec_l3v.fc.eisl_vld: 0x0 hom_pr_lu_vec_l3v.fc.mpls_vld: 0x0 hom_pr_lu_vec_l3v.fc.label_lbl: 0x0 hom_pr_lu_vec_l3v.fc.label_ttl: 0x0 hom_pr_lu_vec_l3v.fc.label_exp: 0x0 hom_pr_lu_vec_l3v.fc.label_s: 0x0 hom_pr_lu_vec_l3v.fc.fc_spare: 0x0 hom_pr_lu_vec_l3v.ip: 0x00000000000000000000000000C0A84B01000000000000000000000000C0A84B02AA3B01FF000000A8002A022 hom_pr_lu_vec_l3v.ip.l3_type: 0x2 hom_pr_lu_vec_l3v.ip.pyld_len: 0x4 hom_pr_lu_vec_l3v.ip.v6: 0x0 hom_pr_lu_vec_l3v.ip.ver: 0x4 hom_pr_lu_vec_l3v.ip.hl: 0x5 hom_pr_lu_vec_l3v.ip.dscp: 0x0 hom_pr_lu_vec_l3v.ip.ecn: 0x0 hom_pr_lu_vec_l3v.ip.v6_hbh: 0x0 hom_pr_lu_vec_l3v.ip.v6_frag: 0x0 hom_pr_lu_vec_l3v.ip.pklen: 0x54 hom_pr_lu_vec_l3v.ip.df: 0x0 hom_pr_lu_vec_l3v.ip.mf: 0x0 hom_pr_lu_vec_l3v.ip.fragoff: 0x0 hom_pr_lu_vec_l3v.ip.ttl: 0xFF hom_pr_lu_vec_l3v.ip.prot: 0x1 hom_pr_lu_vec_l3v.ip.csum: 0xAA3B hom_pr_lu_vec_l3v.ip.da: 0x00000000000000000C0A84B02 hom_pr_lu_vec_l3v.ip.sa: 0x00000000000000000C0A84B01 hom_pr_lu_vec_l3v.ip.mpls_null: 0x0 hom_pr_lu_vec_l3v.ip.mpls_exp: 0x0 hom_pr_lu_vec_l3v.ip.ip_spare: 0x0 hom_pr_lu_vec_l3v.arp: 0x00000000000000000000000000C0A84B01000000000000000000000000C0A84B02AA3B01FF000000A8002A022 hom_pr_lu_vec_l3v.arp.l3_type: 0x2 hom_pr_lu_vec_l3v.arp.pyld_len: 0x4 hom_pr_lu_vec_l3v.arp.etype: 0xA8 hom_pr_lu_vec_l3v.arp.hrd: 0x2A0 hom_pr_lu_vec_l3v.arp.pro: 0x0 hom_pr_lu_vec_l3v.arp.hln: 0xFC hom_pr_lu_vec_l3v.arp.pln: 0x7 hom_pr_lu_vec_l3v.arp.op: 0xA8EC hom_pr_lu_vec_l3v.arp.sha: 0x302A12C0A hom_pr_lu_vec_l3v.arp.spa: 0x0 hom_pr_lu_vec_l3v.arp.tha: 0x000000000 hom_pr_lu_vec_l3v.arp.tpa: 0x2A12C04 hom_pr_lu_vec_l3v.arp.ar_spare: 0x0000000000000000000000003 hom_pr_lu_vec_l3v.mpls: 0x00000000000000000000000000C0A84B01000000000000000000000000C0A84B02AA3B01FF000000A8002A022 hom_pr_lu_vec_l3v.mpls.l3_type: 0x2 hom_pr_lu_vec_l3v.mpls.etype: 0x5404 hom_pr_lu_vec_l3v.mpls.pyld_len: 0x0 hom_pr_lu_vec_l3v.mpls.label0_lbl: 0x2A0 hom_pr_lu_vec_l3v.mpls.label0_ttl: 0x0 hom_pr_lu_vec_l3v.mpls.label0_exp: 0x0 hom_pr_lu_vec_l3v.mpls.label0_s: 0x0 hom_pr_lu_vec_l3v.mpls.label1_lbl: 0xC07FC hom_pr_lu_vec_l3v.mpls.label1_ttl: 0x8E hom_pr_lu_vec_l3v.mpls.label1_exp: 0x2 hom_pr_lu_vec_l3v.mpls.label1_s: 0x1 hom_pr_lu_vec_l3v.mpls.label2_lbl: 0x12C0A hom_pr_lu_vec_l3v.mpls.label2_ttl: 0x2A hom_pr_lu_vec_l3v.mpls.label2_exp: 0x0 hom_pr_lu_vec_l3v.mpls.label2_s: 0x0 hom_pr_lu_vec_l3v.mpls.label3_lbl: 0x3 hom_pr_lu_vec_l3v.mpls.label3_ttl: 0x0 hom_pr_lu_vec_l3v.mpls.label3_exp: 0x0 hom_pr_lu_vec_l3v.mpls.label3_s: 0x0 hom_pr_lu_vec_l3v.mpls.label4_lbl: 0x0 hom_pr_lu_vec_l3v.mpls.label4_ttl: 0x0 hom_pr_lu_vec_l3v.mpls.label4_exp: 0x0 hom_pr_lu_vec_l3v.mpls.label4_s: 0x0 hom_pr_lu_vec_l3v.mpls.label5_lbl: 0x0 hom_pr_lu_vec_l3v.mpls.label5_ttl: 0x0 hom_pr_lu_vec_l3v.mpls.label5_exp: 0x0 hom_pr_lu_vec_l3v.mpls.label5_s: 0x0 hom_pr_lu_vec_l3v.mpls.label6_lbl: 0x12C04 hom_pr_lu_vec_l3v.mpls.label6_ttl: 0x2A hom_pr_lu_vec_l3v.mpls.label6_exp: 0x0 hom_pr_lu_vec_l3v.mpls.label6_s: 0x0 hom_pr_lu_vec_l3v.mpls.label7_lbl: 0x3 hom_pr_lu_vec_l3v.mpls.label7_ttl: 0x0 hom_pr_lu_vec_l3v.mpls.label7_exp: 0x0 hom_pr_lu_vec_l3v.mpls.label7_s: 0x0 hom_pr_lu_vec_l3v.mpls.label8_lbl: 0x0 hom_pr_lu_vec_l3v.mpls.label8_ttl: 0x0 hom_pr_lu_vec_l3v.mpls.label8_exp: 0x0 hom_pr_lu_vec_l3v.mpls.label8_s: 0x0 hom_pr_lu_vec_l3v.mpls.last_label_lbl: 0x0 hom_pr_lu_vec_l3v.mpls.last_label_ttl: 0x0 hom_pr_lu_vec_l3v.mpls.last_label_exp: 0x0 hom_pr_lu_vec_l3v.mpls.last_label_s: 0x0 hom_pr_lu_vec_l3v.mpls.mpls_spare: 0x0 *** Parsed l4 vector
こんな感じに表示されます。
すでに install が完了していて、すぐに使える状態になっていることを前提で進めていきます。 まだ install していない人は、APIC Postman の紹介 を参考に install してください。 下記のように Apps -> Installed Apps で ELAM Assistant が表示されていれば install が完了しています。
上記 Open を click した後、APIC version 5.2 未満の version では Leaf/Spine Switch に login が必要です。APIC version 5.2 未満の version をご使用の場合は、下記のような画面が表示されますので、まずは Username/Password を入力し、Validate & Save を click してください。
APIC version 5.2 以降の version をご使用の方は Open を click すると以下の画面が表示されます。
上記画面を scroll させると、使い方が書いてあるので、そのとおりに進めていきます。
指示のとおり、Capture (Perform ELAM) を click します。
現在、2. まで進んだので、3 - 5 の ELAM capture を行いたい switch を選択し設定を行います。
今回は、1 つの EPG 上に leaf101 eth1/30 encap vlan 751 と leaf104 eth1/30 encap vlan 752 を static binding で設定し、bridge する構成で行なっています。 同一 EPG 内の通信のため、contract は設定していません。 Tenant 設定は下記になります。
上記設定で、node-101 eth1/30 に、端末 192.168.75.1 が、node-104 eth1/30 に、端末 192.168.75.2 が接続されているので、192.168.75.1 -> 192.168.75.2 へ ping を実行した時に各 leaf が、packet を受信できているかどうかを確認するため、ELAM capture を行なってみます。
指示通り、まずは、capture 対象の node を選択 (今回は node-101, node-104 を追加) します。
今回は、frontport からの通信を capture するため、Direction は default のままで、Source I/F は eth1/30、node-101 は icmp echo を capture するため、Parameters にて dst ip を 192.168.75.2 に、node-104 は icmp echo reply を capture するため、Parameters にて src ip を 192.168.75.2 にして Set ELAM(s) を click。
これで、capture を行う準備ができたので、ping を実行し、6 - 9 の指示通りに進めていきます。
Check Trigger を click すると、capture が完了しているため、Status が Report Ready に変更されます。 capture できなかった場合、Set のままです。 また、ELAM は、条件に match した最初の packet を capture すると Triggered になり capture が終了します。 そのため、packet が流れ続けている環境で parameter 設定を適当に行うと、意図した packet とは異なる packet を capture してしまうため、注意が必要です。
上記 Report Ready になった場合、ELAM report が生成されているため、Report Ready を click すると、その node の ELAM report の内容を確認することができます。
今回は、node-101 の capture 結果を見てみることにします。
node-101 の Report Ready を click することで ELAM Report Parse Result に結果が表示されます。
下記は、ELAM Report Parse Result の Express の結果です。 Raw を click すると、先ほどの難しい出力結果が表示されます。
Packet が ACI Fabric 内で drop しているときの Troubleshooting では、最後の drop reason の出力を確認します。 問題なく通過している場合には no drop になりますが、EPG 間通信で contract を設定せずに packet drop が発生した場合は、SECURITY DENY と表示される等、drop した理由が表示されます。
ちなみに、raw data は、apic の /data2/gluster/gv0/Cisco_ElamAssistant/ directory の中にあります。
leaf/spine switch に login し、CLI で elam capture を行なった場合、elam report は下記のように switch の /var/log/dme/log/elam_report.txt に保存されますが、ELAM Assistant の場合、その情報を、/data2/gluster/vg0/Cisco_ElamAssistant へ copy しています。 copy する際に、node 名が追加され node-101_slot1_asic0_insel6_elam_report.txt のような形式の file になります。 elam parameter で option として存在する name your capture に何か入力すると、elam_report.txt の部分がその入力した値になります。
## node-101 leaf switch fab4-leaf1# ls -l /var/log/dme/log/elam_report.txt
-rw-rw-rw- 1 root root 1249349 Jan 20 14:44 /var/log/dme/log/elam_report.txt fab4-leaf1# fab4-leaf1# head -30 /var/log/dme/log/elam_report.txt #########################HOMEWOOD ELAM REPORT START######################### Dumping report for asic type 8 inst 0 slice 0 a_to_d 1 insel 6 outsel 0 LUA captured data with : SRCID: 6a PKTID: 255 *** All outer vector: hom_elam_in_vec.all_outer_vec: 0x00000000000000000000000000000000000000000000000008AE100160000000000000000000000000018150960200000000000000000000000181509605547603FE0000015000540440000000000000000005DE100000000F4CFE237646DF4CFE237646F hom_elam_in_vec.all_outer_vec.l2vec0: 0x00000000000005DE100000000F4CFE237646DF4CFE237646F hom_elam_in_vec.all_outer_vec.l3vec0: 0x00000000000000000000000000C0A84B01000000000000000000000000C0A84B02AA3B01FF000000A8002A022 hom_elam_in_vec.all_outer_vec.l4vec0: 0x00000000000000000000000004570800B hom_elam_in_vec.all_outer_vec.spare_bit_padding: 0x00000000000000000 *** Parsed l2 vector hom_pr_lu_vec_l2v: 0x00000000000005DE100000000F4CFE237646DF4CFE237646F hom_pr_lu_vec_l2v.da: 0xF4CFE237646F hom_pr_lu_vec_l2v.da.trill: 0xF4CFE237646F hom_pr_lu_vec_l2v.da.trill.ce_da: 0xF4CFE237646F hom_pr_lu_vec_l2v.da.ce_da: 0xF4CFE237646F hom_pr_lu_vec_l2v.da.dce_da: 0xF4CFE237646F hom_pr_lu_vec_l2v.sa: 0xF4CFE237646D hom_pr_lu_vec_l2v.sa.trill: 0xF4CFE237646D hom_pr_lu_vec_l2v.sa.trill.irbid: 0x646D hom_pr_lu_vec_l2v.sa.trill.erbid: 0xE237 hom_pr_lu_vec_l2v.sa.trill.spare: 0xF4CF hom_pr_lu_vec_l2v.sa.ce_sa: 0xF4CFE237646D hom_pr_lu_vec_l2v.sa.dce_sa: 0xF4CFE237646D hom_pr_lu_vec_l2v.vntag_vld: 0x0 hom_pr_lu_vec_l2v.ivntag_vld: 0x0 hom_pr_lu_vec_l2v.vir: 0x0 hom_pr_lu_vec_l2v.vir.vntag: 0x0 fab4-leaf1#
## apic fab4-apic2# ls -l /data2/gluster/gv0/Cisco_ElamAssistant/node-101*
-rw-r--r-- 2 root root 1249376 Jan 20 14:44 /data2/gluster/gv0/Cisco_ElamAssistant/node-101_slot1_asic0_insel6_elam_report.txt fab4-apic2#
ACI Fabric 内の traffic flow の解析を行う上で、ELAM capture はとても有効ですが、設定した条件に match する最初の packet しか取得できないため、parameter 設定を慎重に行う必要があります。 条件が明確になっていない場合、意図せぬ packet を capture してしまい、Troubleshooting が行えないこともあります。
そのため、まずは SPAN を行い、drop している packet の特性を確認した上で、ELAM capture を行うことをお勧めします。
SPAN については、SPAN 機能の基本設定と動作概要 もあわせてご参照ください。
検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう
シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします
下記より関連するコンテンツにアクセスできます