コンテンツにスキップ

裏取りステータス: code-verified (2026-05-10)

sonic-buildimage/src/system-health/health_checker/sysmonitor.py に sysmonitor 本体、sonic-utilities/scripts/sysreadyshow:30SYSREADY_TABLE = "SYSTEM_READY|SYSTEM_STATE" を STATE_DB から読む。CLI は sonic-utilities/show/system_health.py:141 @system_health.group('sysready-status', invoke_without_command=True)brief / detailtests/system_health_test.py:329-336 で検証。

System Ready

なぜ必要か

SONiC の起動は 非同期。systemd の service が active でも、その内部の SWSS 系 daemon が CONFIG_DB を消化して ASIC に届くまで時間が掛かる。「システムが本当に traffic を受けられる状態か」を一発で判定する仕組みがなく、Monit 系の 1 分 poll では遅延・粒度が不足1

System Ready は Python 製 daemon sysmonitor を追加し1:

  • 全 essential host service の up を event-driven で検出
  • 各 docker app に closest UP status を能動的に申告させる
  • 集約結果として 1 つの "system ready" 状態を CLI / syslog に公開

system-health フレームワークに統合される。

判定ロジック

flowchart TB
  BOOT[boot] --> START[systemd で各 service up]
  START --> EV[sysmonitor: dbus event<br/>service active]
  EV --> CHK{FEATURE.check_up_status?}
  CHK -- false --> SKIP[判定対象外]
  CHK -- true --> WAIT[app-ready 通知待ち]
  WAIT --> APP[App が STATE_DB FEATURE<br/>up_status=true 書込]
  APP --> AGG{全対象 up?}
  AGG -- yes --> READY[SYSTEM_READY=UP<br/>syslog 'System is ready']
  AGG -- no --> WAIT
  AGG -. timeout .-> DOWN[SYSTEM_READY=DOWN<br/>fail_reason 集約]

どこに状態が出るか

キー 意味
CONFIG_DB.FEATURE\|<name>.check_up_status true で system ready 判定対象(新規 leaf。YANG sonic-feature 拡張)1
STATE_DB.FEATURE\|<name>.up_status App が自分の closest UP を申告(true/false + 任意 fail_reason1
STATE_DB.SYSTEM_READY\|SYSTEM_STATE 集約結果(CLI が読む先)

sysmonitor 内の sub-thread は (1) systemd dbus event、(2) docker container running 監視、(3) app-ready hook を持つ1

Rev 0.4 で追加された軸

  • Host daemon もコンテナ外で動く daemon を ready 判定対象に追加。「コンテナは全部 up でも host daemon が起動失敗」を見逃さない1
  • Admin state: system ready 機能自体を disable できる。デバッグや特殊ワークロード用1

CLI 出力

Command 内容
show system-health sysready-status 1 行サマリ(ready / not ready, since timestamp)
... brief feature 単位の up/down 行
... detail fail_reason / 時刻 まで含む
show system-health sysready-status
show system-health sysready-status detail

# CONFIG_DB で feature を ready 判定対象にする
sonic-cfggen -d -v 'FEATURE'

制限事項

  • HLD Rev 0.4 で日付欄空欄
  • ready 判定は App 自己申告に依存。app バグで up_status を書かないと永遠に ready にならない
  • timeout 絶対値は HLD 固定なく実装/運用側に委ねる
  • warm-boot 中の ready 判定は別扱い(warm-boot 完了の意味と微妙に異なる)

干渉する機能

systemd / Monit(完全置換ではなく ready 判定だけ sysmonitor が担う)/ system-health フレームワーク / FEATURE 表(check_up_status 追加)/ fastboot・warmboot / TACACS / AAA / SNMP の boot 順。

トラブルシューティング

show system-health sysready-status detail
# fail_reason を見て該当 feature を追跡

docker ps
sudo systemctl status <feature>.service
redis-cli -n 6 HGETALL "FEATURE|swss"

# sysmonitor のログ
journalctl -u system-health 2>/dev/null

関連 Topics

引用元

関連 Topics


  1. sonic-net/SONiC doc/system_health_monitoring/system-ready-HLD.md @ 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06