裏取りステータス: code-verified (2026-05-10)
sonic-buildimage/src/system-health/health_checker/sysmonitor.py に sysmonitor 本体、sonic-utilities/scripts/sysreadyshow:30 が SYSREADY_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 / detail も tests/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_reason)1 |
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¶
- 11-reboot: warm/fast boot との関係
- 09-telemetry-snmp: system-health とテレメトリ