コンテンツにスキップ

SUPPRESS_ASIC_SDK_HEALTH_EVENT テーブル

概要

ASIC / SDK が発する health event のうち、重大度 (severity) ごとに抑制ルールとカテゴリフィルタを定義するテーブル1。 イベントの発火頻度が高いベンダーで、必要なものだけを STATE_DB/SYSLOG に通すために使う。

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>SUPPRESS_ASIC_SDK_HEALTH_EVENT")]
  DM["SwitchOrch"]
  CDB --> DM
  SAI["SAI<br/>sai_switch_api"]
  DM --> SAI

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

SUPPRESS_ASIC_SDK_HEALTH_EVENT|<severity>

<severity>: fatal / warning / notice のいずれか。3 行が上限。

フィールド

フィールド 説明
max_events uint32 DB に保持できるイベント最大数。これを超えると古いものから捨てる
categories leaf-list of enum (software / firmware / cpu_hw / asic_hw) この severity で抑制したいカテゴリ集合。ordered-by user

購読者

  • syncd / syncd-rpc 内の SAI health monitor 拡張
  • イベントは別途 EVENT_HISTORY 系テーブル (STATE_DB) で観測可能

関連 YANG

  • sonic-suppress-asic-sdk-health-event

関連リファレンス

  • YANG: sonic-suppress-asic-sdk-health-event

引用元

関連ページ

運用ヒント

典型値

  • key 形式: SUPPRESS_ASIC_SDK_HEALTH_EVENT|<severity> (fatal/warning/notice)。最大 3 行。
  • categories: software / firmware / cpu_hw / asic_hw のうち抑制したいものを列挙。
  • max_events: 数百〜数千程度を推奨。

よくある誤設定

  • categoriesfatal 重大度のイベントを大量に抑制してしまい、本当に必要なアラートを見逃す。
  • <severity> に許可外 (error / info 等) を入れて投入に失敗する。

確認コマンド

sonic-db-cli CONFIG_DB keys 'SUPPRESS_ASIC_SDK_HEALTH_EVENT|*'
sonic-db-cli STATE_DB keys 'ASIC_SDK_HEALTH_EVENT_TABLE|*'

値依存挙動マトリクス

severity (key) 値別挙動

SAI 変換 挙動
fatal SAI_SWITCH_ATTR_REG_FATAL_SWITCH_ASIC_SDK_HEALTH_CATEGORY fatal 重大度の health event カテゴリを登録。
warning SAI_SWITCH_ATTR_REG_WARNING_SWITCH_ASIC_SDK_HEALTH_CATEGORY warning 重大度のカテゴリを登録。
notice SAI_SWITCH_ATTR_REG_NOTICE_SWITCH_ASIC_SDK_HEALTH_CATEGORY notice 重大度のカテゴリを登録。
空文字 なし SWSS_LOG_ERROR("Failed to parse switch hash key: empty string") → エントリ破棄。
その他 なし SWSS_LOG_ERROR("Unknown severity %s") → エントリ破棄。
プラットフォーム非対応 severity なし SWSS_LOG_NOTICE("Unsupport to register categories on severity %d") → スキップ。

categories 値別挙動

SAI 変換 挙動
software SAI_SWITCH_ASIC_SDK_HEALTH_CATEGORY_SW ソフトウェア起因イベントを抑制。
firmware SAI_SWITCH_ASIC_SDK_HEALTH_CATEGORY_FW ファームウェア起因イベントを抑制。
cpu_hw SAI_SWITCH_ASIC_SDK_HEALTH_CATEGORY_CPU_HW CPU ハードウェア起因イベントを抑制。
asic_hw SAI_SWITCH_ASIC_SDK_HEALTH_CATEGORY_ASIC_HW ASIC ハードウェア起因イベントを抑制。
省略(未指定) なし 全カテゴリが抑制対象として登録される。DEL 操作時も同様に全カテゴリの抑制を解除。

例外条件・特殊挙動

  • key が空文字列: key が空の場合 SWSS_LOG_ERROR("Failed to parse switch hash key: empty string") → エントリ破棄。2
  • severity が未知の値: key に設定された severity が SAI の severity map に存在しない場合 SWSS_LOG_ERROR("Unknown severity %s") → エントリ破棄。有効値は SAI 定義の fatal / warning / notice 等のみ。2
  • SAI 非対応 severity: m_supportedAsicSdkHealthEventAttributes に存在しない severity は SWSS_LOG_NOTICE("Unsupport to register categories on severity %d") → スキップ。プラットフォームによって対応 severity が異なる。2
  • categories フィールド未指定でデフォルト全カテゴリ: categories フィールドが存在しない場合は registerAsicSdkHealthEventCategories(saiSeverity, key) が引数なしで呼ばれ、全カテゴリが抑制対象として登録される。2
  • DEL 操作は全カテゴリ抑制解除: DEL_COMMAND 受信時も registerAsicSdkHealthEventCategories(saiSeverity, key) 引数なしが呼ばれ全カテゴリの抑制を解除する。2

派生・条件付き登録 (Phase 6/7)

Phase 6: 自動派生

SwitchOrch が SUPPRESS_ASIC_SDK_HEALTH_EVENT エントリの event_category フィールド値を対応する SAI health event suppression 属性へ自動マッピングする。Config-DB 内フィールド間の自動付与なし。

Phase 7: 条件付き登録 (add_manager 条件)

SwitchOrch は常時登録し SUPPRESS_ASIC_SDK_HEALTH_EVENT テーブルを無条件購読する。SAI が health event suppression をサポートしない場合は SAI 属性設定がエラーになるが orchagent はログのみで継続する。

Phase 8: Handler メソッド内分岐

Handler 分岐条件 効果 evidence
SwitchOrch event_category フィールド値 対応する SAI health event カテゴリへの suppress 属性設定 switchorch.cpp
SwitchOrch エントリ削除 対応 SAI suppress 設定を解除 switchorch.cpp
SwitchOrch SAI 応答エラー ログ出力 + 処理継続 (致命的エラーとしない) switchorch.cpp

スキャン証跡: SUPPRESS_ASIC_SDK_HEALTH_EVENT は比較的新しいテーブル。SwitchOrch 経由で SAI の ASIC health event フィルタリングを制御。Config-DB 内フィールド間の自動派生なし(該当なし)。

CDB → 実コンテナ動作トレース

段階 1: Consumer 登録

  • orchagent / AsicSdkHealthEventOrch: SUPPRESS_ASIC_SDK_HEALTH_EVENT テーブルを SubscriberStateTable で購読。

段階 2: CFG → APPL 翻訳

  • AsicSdkHealthEventOrch が抑制するイベントカテゴリ / 重大度リストを内部設定に格納。
  • APP_DB への書き込みなし。

段階 3: APPL → SAI

  • SAI: HealthEvent コールバックフィルタを設定 (SAI sai_switch_api->set_switch_attributeSAI_SWITCH_ATTR_*_HEALTH_EVENT_SUPPRESS)。

段階 4: タイミング + 副作用

  • 設定反映は即時。以降の ASIC SDK ヘルスイベントが抑制される。
  • 副作用: 重要なイベントを抑制すると障害検知が遅れる。最小限の抑制に留めることを推奨。

書き込み入り口 (Direction A)

SUPPRESS_ASIC_SDK_HEALTH_EVENT テーブルへの書き込みが発生するコード経路を網羅的に調査した結果。

CLI

  • config suppress-asic-sdk-health-event add/del ...config/main.pyset_entry() を呼ぶ (sonic-utilities/config/main.py)

minigraph / sonic-cfggen

minigraph.py に SUPPRESS_ASIC_SDK_HEALTH_EVENT 生成なし

REST / gNMI

REST/gNMI 書き込み経路なし

db_migrator

db_migrator.py での SUPPRESS_ASIC_SDK_HEALTH_EVENT マイグレーションなし

ビルド時デフォルト (build-time default)

なし

ハードコードデフォルト / ランタイム注入

なし

死活・デッドコード

なし


  1. YANG 定義: sonic-suppress-asic-sdk-health-event.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-suppress-asic-sdk-health-event.yang; schema 定義は sonic-swss-common/common/schema.hCFG_SUPPRESS_ASIC_SDK_HEALTH_EVENT_NAME = "SUPPRESS_ASIC_SDK_HEALTH_EVENT" 

  2. switchorch 実装: sonic-swss/orchagent/switchorch.cpp. https://github.com/sonic-net/sonic-swss/blob/master/orchagent/switchorch.cpp