コンテンツにスキップ

イベント/アラーム拡張監視設定 (extended-monitor)

概要

SONiC の Event and Alarm Framework は eventd デーモンが中心となってイベント収集・配信を行う1。基本トランスポート設定 (ZMQ エンドポイント等) は event-publisher.md を参照。本ページは拡張監視設定として:

  1. EVENT テーブル保持上限 (/etc/eventd.json) — イベント履歴の最大レコード数と保持日数
  2. イベントプロファイル (/etc/evprofile/default.json) — イベント種別ごとの severity と有効/無効フラグ

を記述する。これらのパラメータは CONFIG_DB テーブルではなく、ファイルベース設定として管理される。

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

flowchart LR
  EJ[("/etc/eventd.json<br/>no-of-records / no-of-days")]
  EP[("/etc/evprofile/default.json<br/>severity / enable per event-id")]
  EV["eventd (docker-eventd)<br/>EventDB service"]
  EVT[("EVENT_DB<br/>EVENT / ALARM<br/>EVENT_STATS / ALARM_STATS")]
  EJ --> EV
  EP --> EV
  EV --> EVT

凡例

CONFIG_DB ではなく /etc 配下のファイルから読み込まれる設定。eventd が EVENT_DB (Redis DB index 19) の各テーブルを管理する。


EVENT テーブル保持上限 (/etc/eventd.json)

{
    "config": {
        "no-of-records": 40000,
        "no-of-days": 30
    }
}
フィールド デフォルト 範囲 説明
no-of-records 40000 1–40000 EVENT テーブルが保持できる最大レコード数。上限に達すると古いレコードから順に削除する
no-of-days 30 1–30 イベントが EVENT テーブルに留まれる最大日数。日数超過エントリも同様に削除される

どちらかの上限に達した時点でローテーション (wrap-around) が発動する。SIGINT を eventd プロセスに送ることで設定を再読み込みさせることができる。

実装状況

HLD (section 3.1.7) では上記設定ファイルが定義されているが、利用可能な eventd.cpp ソースコードではこのファイルの読み込みロジックが確認できなかった。実装が進行中または部分的である可能性がある。verification: hld-only


イベントプロファイル (/etc/evprofile/default.json)

eventd は起動時に /etc/evprofile/default.json を読み込み、static_event_map を構築する。開発者がイベント/アラームを新規追加する際には、このファイルに event-id を宣言する。

{
    "__README__": "Supported severities: CRITICAL, MAJOR, MINOR, WARNING and INFORMATIONAL.",
    "events": [
        {
            "name": "SYSTEM_STATUS",
            "revision": 0,
            "severity": "INFORMATIONAL",
            "enable": "true",
            "message": "System Status Information"
        },
        {
            "name": "TEMPERATURE_EXCEEDED",
            "revision": 0,
            "severity": "CRITICAL",
            "enable": "true",
            "message": "Temperature threshold is 75 degrees."
        }
    ]
}

プロファイルエントリのフィールド

フィールド デフォルト 説明
name string 必須 イベント識別子 (event-id)。event_publish() の tag と対応
revision uint64 0 イベント定義のリビジョン番号。パラメータ変更時にインクリメントする
severity enum 必須 CRITICAL / MAJOR / MINOR / WARNING / INFORMATIONAL の いずれか。INFORMATIONAL はアラームには不適用
enable string ("true"/"false") "true" "false" の場合、eventd は該当イベントを受信しても破棄する (debug ログのみ)
message string 任意 静的メッセージ。動的メッセージと結合して EVENT テーブルの text フィールドに書き込まれる

EVENT_DB のテーブル構造

EVENT テーブルと ALARM テーブルは CONFIG_DB ではなく EVENT_DB (Redis DB index 19) に格納される2

EVENT テーブルエントリ

EVENT|<id>
フィールド デフォルト 説明
id uint64 自動採番 単調増加するシーケンス ID (time_t:32bit + 5桁連番)
type-id string イベント識別子 (evprofilename と対応)
text string "" 静的 + 動的メッセージの結合
time-created uint64 (timeticks64) 発行時刻 イベント発生タイムスタンプ (nanoseconds)
action enum "" RAISE / CLEAR / ACK_ALARM / UNACK_ALARM / 空 (one-shot)
resource string "" イベント発生源 (インタフェース名・IP アドレス等)
severity string evprofile 由来 イベント重大度
revision uint64 0 evprofile の revision と一致
acknowledged boolean false ALARM テーブルのみ。ユーザー確認フラグ

ALARM_STATS テーブル

フィールド デフォルト 説明
critical 0 RAISE 済みで未 CLEAR・未 ACK の CRITICAL アラーム数
major 0 同 MAJOR
minor 0 同 MINOR
warning 0 同 WARNING
acknowledged 0 ACK 済みアラーム数 (全 severity 合計)

pmonALARM_STATS を購読してシステム LED を制御する:
Critical/Major アラームあり → Red、Minor/Warning のみ → Amber、アラームなし → Green。


関連 YANG

イベントの型定義 (producer 側スキーマ) は以下の YANG で管理される。CONFIG_DB スキーマではなく、イベントペイロードの構造定義。

YANG モジュール 対象
sonic-events-common 共通 grouping (timestamp, usage/limit) および severity extension
sonic-events-host disk-usage, memory-usage, cpu-usage, event-sshd, event-disk 等
sonic-events-swss swss コンテナ発行イベント
sonic-events-syncd syncd 発行イベント
sonic-events-bgp BGP イベント
sonic-events-dhcp-relay DHCP relay イベント

フィールド暗黙デフォルト (Phase A — コード由来)

HLD および eventd.cpp の定数から導出する13

/etc/eventd.json — EVENT テーブル保持上限

フィールド コード由来デフォルト 根拠
no-of-records 40000 HLD section 3.1.7; "The size of Event Table is 40k records"
no-of-days 30 HLD section 3.1.7; "or 30 days worth of events"

/etc/evprofile/default.json — イベントプロファイル

フィールド コード由来デフォルト 根拠
revision 0 HLD section 3.1.2.3; "If not given, the default revision '0' is assigned"
enable "true" HLD section 3.1.2; イベントプロファイルのデフォルトサンプルでは "enable": "true"
severity 開発者定義 (必須) イベント追加時に開発者が設定。デフォルト値なし

EVENT_DB 内フィールド (eventd が自動設定)

フィールド コード由来デフォルト 根拠
revision 0 evprofile で revision 未指定時の fallback
acknowledged false ALARM テーブルエントリ追加時の初期値 (HLD section 3.1.3)
action (one-shot event) "" (空文字列) アラームでないイベントは action フィールドなし

フラッディング防止パラメータ (ハードコード)

定数 説明
MAX_CACHE_SIZE 699050 MB(100) / EVT_SIZE_AVG = (100×1024×1024) / 150eventd.cpp:31-33
EVT_SIZE_AVG 150 バイト キャッシュサイズ計算用イベント平均サイズ — eventd.cpp:31
READ_SET_SIZE 100 EVENT_CACHE_READ 1回の返却件数上限 — eventd.cpp:36
HEARTBEAT_INTERVAL_SECS 2 eventd ハートビート発行間隔 — eventd.h:43
STATS_HEARTBEAT_MIN 300 ms ハートビート最小分解能 — eventd.h:24

discrepancy メモ

  • no-of-records/no-of-days の実装: HLD では eventd.json を読み込む設計だが、利用可能な eventd.cpp ソースに読み込みロジックが見当たらない。shallow clone の制約により EventDB サービス側の実装が欠落している可能性がある。HLD 値をデフォルトとして採用する。
  • ALARM テーブルのリブート挙動: HLD では ALARM テーブルはリブートで初期化されると明記 ("NOT persisted and its contents are cleared with a reload")。EVENT テーブルは永続化される。

引用元

関連ページ


  1. SONiC/doc/event-alarm-framework/event-alarm-framework.md — Event and Alarm Framework HLD. section 3.1.5 (Event Profile), 3.1.7 (Event Table and Alarm Table). https://github.com/sonic-net/SONiC/blob/master/doc/event-alarm-framework/event-alarm-framework.md 

  2. sonic-net/sonic-swss-common/common/schema.hEVENT_DB = 19, EVENT_HISTORY_TABLE_NAME, EVENT_CURRENT_ALARM_TABLE_NAME, EVENT_STATS_TABLE_NAME, EVENT_ALARM_STATS_TABLE_NAME. https://github.com/sonic-net/sonic-swss-common/blob/master/common/schema.h 

  3. sonic-net/sonic-buildimage/src/sonic-eventd/src/eventd.cppMAX_CACHE_SIZE, EVT_SIZE_AVG, READ_SET_SIZE, HEARTBEAT_INTERVAL_SECS 定数定義. https://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-eventd/src/eventd.cpp