コンテンツにスキップ

運用

ACL / CoPP / mirror の調査では、設定が存在するか、ASIC に反映されたか、counter が増えるかを分けて確認します。CONFIG_DB に見えていることと、実際に hardware に作られていることは同じではありません。

ACL の状態確認

最初に show acl tableshow acl rule で table / rule の存在と status を見ます。show ACL 強化により、AclOrchSTATE_DBACL_TABLE_TABLE / ACL_RULE_TABLE に Active / Inactive を出すため、リソース不足や SAI 失敗で作成できなかった場合を CLI 側から判別できます。

admin@sonic:~$ show acl table
Name          Type      Binding         Description    Stage    Status
------------  --------  --------------  -------------  -------  --------
DATAACL       L3        Ethernet0       data plane     ingress  Active
EVERFLOW      MIRROR    PortChannel0    mirror traffic ingress  Active
EVERFLOWV6    MIRRORV6  PortChannel0    mirror v6      ingress  Inactive

Inactive が出ているとき、原因はおおむね以下のいずれかです。

Status 典型原因 確認場所
Inactive (作成直後) SAI table create が失敗、TCAM スロット不足 /var/log/syslogorchagent SAI_STATUS
Inactive (port バインド) 対象 port が削除済み / admin down 直後 show interfaces status
Active だが hit しない match field が ASIC で未サポート swssloglevel -l INFO -c orchagent で再現確認

次に aclshow で rule counter を見ます。counter が期待通り増えない場合は、traffic が match していない、priority で別 rule に先に当たっている、counter polling が止まっている、ASIC に rule が入っていない、の順に切り分けます。

admin@sonic:~$ aclshow -a
RULE NAME      TABLE NAME      PRIO    PACKETS COUNT    BYTES COUNT
-------------  --------------  ------  ---------------  -----------
DENY_RULE_1    DATAACL         9999    12345            1518000
PERMIT_ANY     DATAACL         1       0                0

counter polling が止まっているかは counterpoll showACL_STAT group の状態を確認します。disable なら counterpoll acl enable で復活させます。STATE_DB / COUNTERS_DB の対応は以下のとおりです。

DB Key 例 用途
CONFIG_DB ACL_TABLE\|DATAACL, ACL_RULE\|DATAACL\|RULE_1 設定
STATE_DB ACL_TABLE_TABLE\|DATAACL 作成結果 (status)
COUNTERS_DB COUNTERS:oid:0x... / ACL_COUNTER_RULE_MAP rule 単位 counter
ASIC_DB ASIC_STATE:SAI_OBJECT_TYPE_ACL_TABLE:oid:... SAI 反映

設定が CONFIG_DB に入っているのに ASIC_DB に出ていない場合は orchagent が握っているので syslog を見ます。

Mirror の確認

Mirror は session と ACL action の 2 段で確認します。MIRROR_SESSION が有効になっているか、collector への経路があるか、SPAN の dst_port が正しいかを先に見ます。その後、mirror 用 ACL table / rule が Active で、該当 rule counter が増えるかを見ます。

admin@sonic:~$ show mirror_session
ERSPAN Sessions
Name      Status  SRC IP       DST IP       GRE  DSCP  TTL  Queue  Policer  Monitor Port  SRC Port  Direction
--------  ------  -----------  -----------  ---  ----  ---  -----  -------  ------------  --------  ---------
everflow0 active  10.1.0.32    2.2.2.2      0x88be  8   255   0      -        Ethernet8     Ethernet0 rx

Status: inactive のときは、collector への route が無い、neighbor MAC が解けていない、policer が無効、のいずれかが多いです。

admin@sonic:~$ redis-cli -n 6 hgetall "MIRROR_SESSION_TABLE|everflow0"
1) "status"
2) "active"
3) "monitor_port"
4) "Ethernet8"
5) "dst_mac"
6) "ec:0d:9a:xx:xx:xx"
7) "route_prefix"
8) "2.2.2.2/32"
9) "next_hop_ip"
10) "10.0.0.1@PortChannel0"

Everflow では LAGECMP、neighbor MAC 変更、IPv6、egress ACL などが絡みます。mirror packet が出ない場合、ACL の match 失敗だけでなく、collector 経路や egress mirror capability も疑います。Everflow テストプランの観点に従い、collector route が ECMP の場合は member すべての MAC が STATE_DB に解決されているかを show ip routeshow arp で揃えます。

Drop 調査の入口

drop 調査では、何を落としているかで見る counter が変わります。

見たいもの 主な入口 代表コマンド / DB
ACL rule で drop したか ACL counter aclshow
port ingress discard port counter portstat
RIF / L3 error interface counter intfstat
drop reason 別の ASIC drop debug counter show dropcounters counts
CPU punt の量 trap flow counter show flowcnt trap

不正パケットの ingress discard テストでは Ethernet 層、IP 層、ACL 層で期待 counter が異なります。SMAC=DMAC のような L2 drop と、TTL 0 や壊れた IP header のような L3 error と、ACL DROP は同じ場所に出ません。

Debug Counter

設定可能な drop counter は SAI debug counter を使い、drop reason の組み合わせをユーザが定義します。show dropcounters capabilities で type ごとの残スロットとサポート理由を確認し、config dropcounters install で必要な counter を作ります。

admin@sonic:~$ show dropcounters capabilities
Counter Type             Total
PORT_INGRESS_DROPS       3
SWITCH_INGRESS_DROPS     2

Reasons supported per counter type:
PORT_INGRESS_DROPS:
  SMAC_EQUALS_DMAC
  SMAC_MULTICAST
  TTL
  L3_ANY
  ACL_ANY
  ...

設定〜観測の典型フロー:

# 残スロットを確認
show dropcounters capabilities

# SMAC=DMAC を独立 counter で計測する
config dropcounters install BAD_SMAC PORT_INGRESS_DROPS '[SMAC_EQUALS_DMAC,SMAC_MULTICAST]' -d "L2 sanity drops"

# 確認
show dropcounters configuration
show dropcounters counts

# 不要になったら削除
config dropcounters delete BAD_SMAC

drop counter は「なぜ落ちたか」を見る道具です。ACL counter は「どの rule に hit したか」を見る道具です。両方を同時に使うと、ACL で期待通り drop しているのか、別の ASIC reason で落ちているのかを分けられます。

SNMP / MIB から見る場合

port illegal packets drop design は、RIF / VLAN など L3 側の SAI counter を Interface MIB へどう集約するかを扱います。SNMPifInErrorsifOutErrors を監視している環境では、L2 port counter と RIF counter の集約方針がトラブルシュート結果に影響します。

snmpwalk で IF-MIB::ifInErrors が振り切れているのに portstat の RX_ERR が静かな場合、RIF 側の counter が SNMP 集約されている可能性があります。逆もまた然りで、SNMP モニタと CLI counter の数字が違っても整合は取れているケースが多いです。

CoPP の確認

CoPP (Control Plane Policer) は CPU 向け punt traffic を trap group ごとに policing します。show copp 系のコマンドは限定的なので、CONFIG_DB と show flowcnt trap を併用します。

admin@sonic:~$ show flowcnt trap stats
    Trap Name         Packets    Bytes    PPS    Trap Group
-----------------  ---------    -----    -----    ----------
arp_req               1234       98720    12       arp
arp_resp              2345      187600    23       arp
bgp                     10        1000     0       bgp_lacp
lacp                   100       12000     1       bgp_lacp
ip2me                   50        4000     0       default

該当 trap が想定 PPS を超えると policer で drop され、対応プロトコル (BGP / LACP / ARP) が落ち始めます。COPP_TABLEcir / cbsred_action: drop を確認し、必要なら trap group ごとに緩めます。

観点 入口 DB
trap group 設定 redis-cli -n 4 keys "COPP_*" CONFIG_DB COPP_TRAP / COPP_GROUP
trap PPS show flowcnt trap stats COUNTERS_DB COUNTERS_TRAP_NAME_MAP
police 結果 hostif policer drop ASIC_DB SAI_OBJECT_TYPE_POLICER

対応コマンド早見表

症状 最初に叩くコマンド 次に見る場所
ACL を作ったのに効かない show acl table / show acl rule で Status STATE_DB ACL_TABLE_TABLE、syslog orchagent
ACL counter が増えない aclshow -a + counterpoll show COUNTERS_DB、priority 衝突
mirror が collector に着かない show mirror_session route / arp / MIRROR_SESSION_TABLE
突然 BGP が落ちた show flowcnt trap stats COPP_TRAP の cir/cbs
port が drop している portstatshow dropcounters counts debug counter で reason 切り分け
L3 で drop している intfstat RIF counter / TTL / IP header
CPU が忙しい top + show flowcnt trap trap PPS 上位、CoPP

関連ページ