Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 09 章: Telemetry / SNMP / ログ を参照。
裏取りステータス: Code-verified
現行 master で実装存在を確認。sonic-host-services/scripts/determine-reboot-cause および scripts/process-reboot-cause が systemd unit (sonic-host-services-data.{determine,process}-reboot-cause.service) として配置されている。process-reboot-cause:27-34 で REBOOT_CAUSE_DIR=/host/reboot-cause/、REBOOT_CAUSE_HISTORY_DIR=/host/reboot-cause/history/、PREVIOUS_REBOOT_CAUSE_FILE=previous-reboot-cause.json、REBOOT_CAUSE_TABLE_NAME="REBOOT_CAUSE"、MAX_HISTORY_FILES=10 を確認。process-reboot-cause:62 で min(MAX_HISTORY_FILES, ...) の 10 件 cap も確認。CLI は sonic-utilities/show/reboot_cause.py の fetch_reboot_cause_history_from_db で REBOOT_CAUSE|* 走査を確認(verified at: 2026-05-09)。
Reboot-cause 履歴の STATE_DB / テレメトリ公開¶
概要¶
SONiC の起動時に「直前の再起動原因」を判定し、JSON ファイルとして履歴保存し、最新分は STATE_DB にも反映する仕組み。show reboot-cause の最新表示に加えて show reboot-cause history で過去最大 10 エントリを表示できるようにする。テレメトリエージェント経由でも履歴を購読可能にする1。
動作仕様¶
起動時シーケンス¶
sequenceDiagram
participant K as Kernel/HW
participant DRC as determine-reboot-cause
participant FS as /host/reboot-cause/history/
participant PRC as process-reboot-cause
participant SDB as STATE_DB
K->>DRC: HW + SW reboot reason
DRC->>FS: reboot-cause-<timestamp>.json
DRC->>FS: previous-reboot-cause.json (symlink)
PRC->>FS: 直近最大 10 ファイル読込
PRC->>SDB: REBOOT_CAUSE|<timestamp> hash
Part 1: determine-reboot-cause¶
旧来 process-reboot-cause と呼ばれていたサービスを determine-reboot-cause にリネーム。HW/SW の reboot 原因を判定し、JSON 形式で次の場所に保存する1:
/host/reboot-cause/history/reboot-cause-<YYYY_MM_DD_HH_MM_SS>.json/host/reboot-cause/previous-reboot-cause.json(直近ファイルへの symlink)
JSON 例:
{
"comment": "",
"gen_time": "2020_10_09_04_53_58",
"cause": "warm-reboot",
"user": "admin",
"time": "Fri Oct 9 04:51:47 UTC 2020"
}
Part 2: process-reboot-cause¶
新サービス process-reboot-cause.service が history ディレクトリを読み、最大 10 件を STATE_DB に書き込む1。
REBOOT_CAUSE|<timestamp>
cause = STRING ; warm-reboot / fast-reboot / reboot / ...
time = STRING ; full date string
user = STRING ; admin など
comment = STRING ; unstructured json
CLI¶
admin@sonic:~$ show reboot-cause
User issued 'warm-reboot' command [User: admin, Time: Fri Oct 9 04:51:47 UTC 2020]
admin@sonic:~$ show reboot-cause history
name cause time user comment
------------------- ----------- ---------------------------- ------ ---------
2020_10_09_04_53_58 warm-reboot Fri Oct 9 04:51:47 UTC 2020 admin
2020_10_09_02_33_06 reboot Fri Oct 9 02:29:44 UTC 2020 admin
2020_10_09_02_00_53 fast-reboot Fri Oct 9 01:58:04 UTC 2020 admin
2020_10_09_01_56_59 reboot Fri Oct 9 01:53:49 UTC 2020 admin
show reboot-cause は従来どおり previous-reboot-cause.json(symlink)から最新分を表示する。history は STATE_DB から複数件を取る。
Telemetry 公開¶
STATE_DB の REBOOT_CAUSE|* キーをテレメトリエージェントが標準の STATE_DB 公開経路で公開する。新規 path 設計や proto 定義は HLD には記述なし。
設定¶
関連する CONFIG_DB¶
HLD には CONFIG_DB エントリの記述は無い。
関連する CLI¶
| Command | 用途 |
|---|---|
show reboot-cause |
直前 reboot の原因(symlink JSON 由来) |
show reboot-cause history |
STATE_DB の直近 10 エントリ |
関連する YANG¶
HLD に YANG モデルの記述は無い。
設定例¶
確認のみ:
ls /host/reboot-cause/history/
cat /host/reboot-cause/previous-reboot-cause.json
redis-cli -n 6 keys "REBOOT_CAUSE|*"
show reboot-cause history
制限事項¶
- STATE_DB に保持されるのは 最大 10 件(
history/ディレクトリ自体は古い分も残る可能性あり、HLD ではローテーション仕様未明記)。 commentは unstructured JSON 文字列で、構造化スキーマは規定されていない。- HLD は 5 年以上前の v0.1 のままで、現行 master と差異が大きい可能性が高い → 2026-05-09 裏取り済み。テーブル名・キー・10 件 cap・JSON ファイル配置は HLD 通り。実装は
sonic-host-servicesのscripts/{determine,process}-reboot-cause、CLI はsonic-utilities/show/reboot_cause.py。
干渉する機能¶
- fast-reboot / warm-reboot / express-reboot:
cause値はこれら reboot タイプを反映する。express-reboot HLD ではshow reboot-reasonをexpressに拡張する記述がある(別 HLD)。 - show techsupport: history JSON ファイルが tech-support に含まれる可能性が高い(HLD 未明記)。
- Telemetry agent: STATE_DB 公開ポリシーに従う。
トラブルシューティング¶
show reboot-cause historyが空 →process-reboot-cause.serviceの起動ログを確認、history ディレクトリに JSON ファイルがあるかを確認。- 直前の reboot 原因が
unknownのまま →determine-reboot-causeが HW/SW 双方の情報を取れているかをログで確認。
コマンド例¶
reboot-cause を gNMI 経由で取得できるか確認する。
show reboot-cause
show reboot-cause history
gnmi_get -target_addr localhost:8080 -xpath '/reboot-cause'
cat /host/reboot-cause/reboot-cause.txt