Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 14 章: Platform / Port / Optics を参照。
裏取りステータス: code-verified
orchagent 側 health event handler は sonic-swss/orchagent/switchorch.{h,cpp}、CONFIG_DB suppress スキーマは sonic-buildimage/src/sonic-yang-models/yang-models/sonic-suppress-asic-sdk-health-event.yang、CLI は sonic-utilities/{show,config}/main.py および tests/asic_sdk_health_event_test.py で確認済み。SAI 側の各ベンダ実装の充足度は ASIC 依存。
ASIC / SDK Health Event のハンドリング(SAI notification → STATE_DB → action)¶
概要¶
ASIC / SDK が検出した内部不整合・FW assert・queue stuck・memory error などを SAI の health event 通知 として上に上げ、SONiC が運用フックに変換するパス1。狙い:
- 従来 platform-specific ログに埋もれていた重要イベントを 共通スキーマで STATE_DB に出す
- syslog / show / telemetry のいずれからも一貫した形で観測可能にする
- 重要度ごとに shutdown / log-only / ignore の運用ポリシーを設定できる
動作仕様¶
flowchart LR
SDK[(ASIC SDK)] --> SAI["SAI health notification\n(severity / category / data)"]
SAI --> SYNCD["syncd / SAI redis"]
SYNCD --> ORCH["Orch (SwitchOrch / 専用 handler)"]
ORCH --> STATE[STATE_DB\nASIC_SDK_HEALTH_EVENT_TABLE]
ORCH --> SYS["syslog / counter"]
STATE --> SHOW[show asic-sdk-health-event]
STATE --> TEL[gNMI telemetry]
CFG[CONFIG_DB\nSUPPRESS_ASIC_SDK_HEALTH_EVENT] --> ORCH
- severity: fatal / warning / notice
- category: ASIC firmware / SDK / link / packet / temperature / memory ...
- timestamp, count, description
- action policy: severity ごとに「ログのみ」「カウンタ計上」「critical 通知」を区別
Suppress(抑制)¶
SUPPRESS_ASIC_SDK_HEALTH_EVENT テーブルで 特定の severity / category を出さない 設定が可能。誤検知が頻発する platform で運用上のノイズを下げるための機構。
設定¶
関連する CONFIG_DB¶
| Table | Key | 説明 |
|---|---|---|
SUPPRESS_ASIC_SDK_HEALTH_EVENT |
<severity> |
抑制対象 category のリスト等 |
関連する CLI¶
| Command | 用途 |
|---|---|
show asic-sdk-health-event |
観測されたイベント一覧 |
show asic-sdk-health-event suppressed-categories |
抑制中 category |
config asic-sdk-health-event suppress <severity> <categories> |
抑制設定 |
制限事項¶
- SAI 実装依存: SAI vendor が health notification を上げない場合、本機構は動かない
- 抑制で見えなくなる: ハードウェア障害解析時は抑制設定を一旦解除する必要がある
- 解釈は category 名にしか頼れない: 詳細メッセージは vendor 文字列でフォーマットが固まっていない
干渉する機能¶
- syslog rate limit: イベント大量発生時に rate-limit でドロップされる可能性
- system health monitor: critical イベントを system health の状態に統合する設計
- telemetry / dial-out: STATE_DB の表を subscribe して外部送信
- SAI failure handling / dump-on-sai-failure: SAI API call 失敗のハンドリングと相補(こちらは notification ベース)
トラブルシューティング¶
- イベントが出ない → vendor SAI が notification を register しているか、orchagent ログを確認
showで何も出ない → STATE_DBASIC_SDK_HEALTH_EVENT_TABLEをredis-cliで直接確認- 抑制が効かない →
SUPPRESS_ASIC_SDK_HEALTH_EVENTの key 名と category 名のスペル確認
コマンド例¶
SAI / SDK のエラーログと dump を確認する。
# SAI failure / SDK health
docker logs syncd 2>&1 | grep -iE 'sai_status|fail|error' | tail
ls -lt /var/dump/ | head
show techsupport --silent --since '1 hour ago'
redis-cli -n 6 keys 'ASIC_SDK_HEALTH_EVENT*'