Runbook: show interfaces counters が突然リセットされる¶
実行前提
counter は ASIC 内部値そのものではなく portstat の差分計算 + clear file が絡む。sonic-clear counters は意図的 reset なので、誤実行を防ぐ意味で運用 cron / 自動監視スクリプトを先に確認すること。実 ASIC counter は reset されない(再起動を除き)。
症状¶
想定原因(優先度順)¶
sonic-clear countersの意図しない実行: cron / Ansible / 監視スクリプト- portstat の clear ファイル (
/tmp/portstat-*.cnt) が削除された:/tmpcleanup - syncd 再起動で ASIC counter 自体リセット
- container 再起動で COUNTERS_DB が初期化: redis ephemeral
切り分け手順¶
flowchart TD
A[interface counter が勝手に 0 に戻る] --> B{sonic-clear counters 実行?}
B -- Yes --> B1[運用上の clear 操作だった / OK]
B -- No --> C{syncd 再起動した?}
C -- Yes --> C1[counter は揮発 / 再起動が原因]
C -- No --> D{FLEX_COUNTER 設定変更?}
D -- Yes --> D1[再設定で base が更新された]
D -- No --> E[orchagent ログ確認 / SAI 異常調査]
確認コマンド¶
1. 直近の clear 実行¶
sudo grep -E "sonic-clear|portstat" /var/log/syslog | tail
sudo ls -la /tmp/portstat-* /tmp/.portstat-* 2>/dev/null
2. COUNTERS_DB の生値¶
- 期待: ASIC 起動以来の累計(再起動以降で増え続ける)
3. syncd / database container restart 履歴¶
4. cron / Ansible¶
対処方法¶
- 監視は
COUNTERS_DBの raw 値を直接 poll(portstat 差分 cache に依存しない) - gNMI / telemetry で counters subscribe する方式に切り替え
- portstat 用 cache を別場所へ: 環境変数
PORTSTAT_CACHE_FILEを設定(実装次第)
確認¶
対処後の正常化を以下で裏取りする。
- 症状解消: 「症状」節で挙げた事象 (counter / log / state) が回復していること
- 再発監視: 数分〜数十分の間隔で同コマンドを再実行し、値がフラップしていないこと
- 副作用なし: 関連サブシステム (syslog /
show interfaces counters errors/show ip bgp summary等) に新規 error が出ていないこと - 永続化:
sudo config save -y済みでconfig_db.jsonに変更が反映されていること (恒久対処の場合)
短時間で再発する場合は「想定原因」リストの次候補に進む。
関連ページ¶
引用元¶
-
sonic-net/sonic-utilities @ 39732bceb — scripts/portstat ↩
-
sonic-net/sonic-swss @ 4305596 — orchagent/flexcounterorch.cpp ↩