Runbook: counter が更新されない (FLEX_COUNTER)¶
実行前提
systemctl restart swss は data plane を 30 秒~数分中断する重操作のため最後の手段。まずは counterpoll <group> disable && counterpoll <group> enable の group 単位 toggle で対処を試みる(これは counter polling thread のみ再生成、forwarding は無影響)。実行前に redis-cli -n 4 HGETALL FLEX_COUNTER_TABLE > /tmp/fc.bak.$(date +%s) で polling 設定 backup、counterpoll show > /tmp/fc.show.bak。誤って disable した group は counterpoll <group> enable で即時復旧。
症状¶
show interfaces countersの数字が固まる / 増加が止まるshow queue counters/show pfc countersが古い値のままshow interfaces counters rateで rate が 0 になる
想定原因¶
FLEX_COUNTER_TABLEで該当 group がdisable: counterpoll 自体が止まっているFLEX_COUNTER_DELAY_STATUSがsystem_ready待ち: 起動直後で polling が始まっていない- polling interval が長過ぎ / 0 で実用上更新されない
- syncd の counter thread が hang / CPU 飽和
- COUNTERS_DB の対応 key 欠落: object が後から作られたが counter 登録が漏れている
切り分け手順¶
flowchart TD
A[counter が更新されない/停止] --> B{FLEX_COUNTER で対象 enable?}
B -- No --> B1[FLEX_COUNTER_TABLE で enable]
B -- Yes --> C{counter group の polling 間隔?}
C -- 0 --> C1[POLL_INTERVAL を 1000 程度に設定]
C -- 正常 --> D{syncd flex counter スレッド健康?}
D -- No --> D1[syncd 再起動 / SAI API エラー確認]
D -- Yes --> E[COUNTERS_DB のキー存在を確認]
確認コマンド¶
1. counterpoll の有効状態と interval¶
counterpoll show
sonic-db-cli CONFIG_DB hgetall "FLEX_COUNTER_TABLE|PORT"
sonic-db-cli CONFIG_DB hgetall "FLEX_COUNTER_TABLE|QUEUE"
sonic-db-cli CONFIG_DB hgetall "FLEX_COUNTER_TABLE|PFCWD"
- 期待:
FLEX_COUNTER_STATUS: enable,POLL_INTERVAL: 1000程度 (ms) - 異常:
disable→ counterpoll の意図的停止か、何かのバグでオフになっている
2. counter delay status¶
sonic-db-cli FLEX_COUNTER_DB keys "FLEX_COUNTER_GROUP_TABLE:*"
sonic-db-cli STATE_DB hget "FLEX_COUNTER_DELAY_STATUS|PORT" status
- 期待:
system_readyまたは該当無し - 異常: 長時間 delay → 上位 orchagent が ready 状態を出していない
3. COUNTERS_DB の生死¶
sonic-db-cli COUNTERS_DB keys "COUNTERS:oid:*" | head
sonic-db-cli COUNTERS_DB hgetall "COUNTERS:$(sonic-db-cli COUNTERS_DB hget COUNTERS_PORT_NAME_MAP Ethernet0)"
- 期待: 数値が更新されている(前後で diff あり)
- 異常: 値固定 → syncd の counter スレッド停止
4. syncd CPU と log¶
5. orchagent からの登録漏れ¶
対処方法¶
- counter 有効化:
counterpoll port enable/counterpoll queue enable/counterpoll pfcwd enable - interval 調整:
counterpoll port interval 1000 - 救命的 reset:
sudo systemctl restart swss(syncd / counter thread も再生成) - 個別 group のみ問題なら、
config save -y後に group を disable → enable
確認¶
対処後の正常化を以下で裏取りする。
- 症状解消: 「症状」節で挙げた事象 (counter / log / state) が回復していること
- 再発監視: 数分〜数十分の間隔で同コマンドを再実行し、値がフラップしていないこと
- 副作用なし: 関連サブシステム (syslog /
show interfaces counters errors/show ip bgp summary等) に新規 error が出ていないこと - 永続化:
sudo config save -y済みでconfig_db.jsonに変更が反映されていること (恒久対処の場合)
短時間で再発する場合は「想定原因」リストの次候補に進む。
関連ページ¶
- ../../internals/sonic-flexcounter-refactor.md
- ../../internals/sonic-counter-initialization-optimization.md
- ../config-db/flex-counter-table.md
引用元¶
-
sonic-net/sonic-swss @ 4305596 — flexcounterorch ↩
-
sonic-net/sonic-utilities @ 39732bceb — counterpoll CLI ↩