ALARM テーブル (EVENT_DB)¶
概要¶
ALARM テーブルは SONiC の Event/Alarm Framework において アクティブなアラーム(未クリア・未クリア状態のもの) を一時的に保持するテーブルである1。
注意: このテーブルは CONFIG_DB ではなく EVENT_DB (Redis DB index 6) に存在する。
schema.hでEVENT_CURRENT_ALARM_TABLE_NAME = "ALARM"と定義されている2。 リブート時に内容はクリアされる(非永続)。
eventd コンテナ内の Alarm Consumer が以下の状態遷移でテーブルを管理する:
action=RAISE_ALARM受信 → エントリ追加、acknowledged=falseで初期化action=CLEAR_ALARM受信 → 対応エントリを削除action=ACK_ALARM受信 →acknowledged=true、acknowledge-time更新action=UNACK_ALARM受信 →acknowledged=false、acknowledge-time更新
データフロー (自動生成)¶
flowchart LR
APP["アプリケーション<br/>(pmon/swss/bgp等)"]
ZMQ["zmqproxy"]
ED["eventd<br/>Alarm Consumer"]
EVDB[("EVENT_DB<br/>ALARM")]
ASTATS[("EVENT_DB<br/>ALARM_STATS")]
NBI["CLI/REST/gNMI"]
LED["System LED<br/>(pmon)"]
APP -- "event_publish(RAISE_ALARM)" --> ZMQ
ZMQ --> ED
ED -- "HSET ALARM|id ..." --> EVDB
ED --> ASTATS
NBI -- "hgetall" --> EVDB
ASTATS --> LED
凡例
EVENT_DB 内の ALARM テーブルへの書き込み経路を示す。CONFIG_DB 経由ではない。
key 構造¶
<id> はシステムが自動採番する uint64 の sequential ID。フォーマット:
例: ALARM|1621460371062299951
フィールド¶
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
id |
uint64 | システム自動採番 | シーケンス ID (key と同値) |
revision |
uint64 | 0 |
event profile のリビジョン番号 |
type-id |
string | — | アラーム識別名 (例: TEMPERATURE_EXCEEDED) |
text |
string | 静的メッセージ | 動的メッセージを含むアラーム説明文 |
time-created |
uint64 | システム自動設定 | アラーム発生時刻 (nanosecond UNIX timestamp) |
severity |
string enum | event profile の値 | CRITICAL / MAJOR / MINOR / WARNING |
action |
string enum | "RAISE" (固定) |
ALARM テーブルには RAISE エントリのみ存在 |
resource |
string | — (optional) | アラーム発生源リソース識別子 |
acknowledged |
boolean | "false" |
ACK 済みフラグ; RAISE 時に false で初期化 |
acknowledge-time |
uint64 | — (ACK 時のみ設定) | ACK/UNACK 操作時のタイムスタンプ |
制約¶
severityにINFORMATIONALはアラームとして不可 (one-shot event 専用)- ALARM テーブルは起動時クリア・非永続。再起動後に残存しない
- 同一条件のアラームが連続 RAISE された場合、eventd は直近キャッシュと比較してフラッドを防ぐ (重複エントリを黙棄)
- テーブルサイズ上限なし (EVENT テーブルが 40,000 件 / 30 日上限のある一方、ALARM はスナップショット)
購読者¶
- CLI:
show alarm [detail | summary | severity | recent | timestamp] - gNMI/REST: OpenConfig alarms コンテナ経由で取得 (
/openconfig-alarms:alarms) - pmon:
ALARM_STATSテーブルのカウンタを参照して System LED を制御 (Critical/Major → 赤、Minor/Warning → 黄、なし → 緑)
関連テーブル¶
| テーブル | 説明 |
|---|---|
EVENT |
全イベント (ALARM 含む) の履歴 — 永続・上限付き |
ALARM_STATS |
重要度別アクティブアラーム数のカウンタ |
EVENT_STATS |
イベント統計 (raised/cleared/acked 累計) |
例外条件・特殊挙動¶
| 条件 | 挙動 |
|---|---|
| 同一アラームが連続 RAISE | eventd の直近キャッシュと一致する場合、重複エントリを黙棄 (flooding 防止) |
| CLEAR_ALARM を対応する RAISE なしで受信 | lookup map にエントリなし → ALARM テーブルへの操作なし |
| リブート (cold/warm/fast) | ALARM テーブルの内容はクリア (非永続); ALARM_STATS も同様にリセット |
| ACK_ALARM を mgmt-framework 以外が発行 | API 上可能だが、設計上 mgmt-framework のみを想定 |
フィールド暗黙デフォルト (Phase A — コード由来)¶
YANG optional / event profile 未指定時の実行時フォールバック。
| フィールド | コード由来デフォルト | fallback 源 |
|---|---|---|
revision |
0 |
event profile の revision 未指定時 — HLD Section 3.1.2.3 |
acknowledged |
"false" |
RAISE_ALARM 処理時に Alarm Consumer が初期化 — HLD Section 3.1.2 |
action |
"RAISE" (ALARM テーブル内では固定) |
ALARM テーブルに格納されるのは RAISE イベントのみ |
acknowledge-time |
フィールド不在 | ACK_ALARM / UNACK_ALARM 受信前は存在しない |
resource |
フィールド不在 (optional) | アプリケーションが渡さない場合はフィールドなし |
補足¶
revision=0デフォルト: event profile のdefault.jsonにrevisionが未記載の場合 eventd が0を採用する。開発者が新しいアラームパラメータ (threshold 変更等) を適用した際にインクリメントすることで、クライアントが異なるリリースのイベントを区別できる。acknowledged=false強制初期化: RAISE_ALARM 処理時に Alarm Consumer が必ずfalseで初期化する。これによりオペレータの ACK 操作より前にacknowledged=trueでエントリが存在することはない。actionは常に"RAISE": CLEAR_ALARM 受信時は対応エントリを 削除 するため、テーブル内のエントリは全てaction=RAISEの状態にある。CLEAR 後の証跡は EVENT テーブルのみに残る。- severity デフォルト不在:
severityは event profile のdefault.jsonで開発者が必ず指定しなければならない。フォールバックは定義されていない。INFORMATIONALは alarm には不可。
関連リファレンス¶
- HLD: Event and Alarm Framework
- YANG:
openconfig-alarms(sonic-mgmt-common) - CLI:
show alarm
引用元¶
関連ページ¶
運用ヒント¶
確認コマンド¶
# アクティブアラーム一覧
show alarm
# redis 直接確認 (EVENT_DB = index 6)
sonic-db-cli EVENT_DB keys 'ALARM|*'
sonic-db-cli EVENT_DB hgetall 'ALARM|<id>'
# ALARM_STATS 確認
sonic-db-cli EVENT_DB hgetall 'ALARM_STATS|state'
よくある確認ポイント¶
acknowledged=trueのアラームは ALARM_STATS のカウンタから除外されるため、System LED の判定に影響しない- リブート後に ALARM テーブルが空になるのは正常動作
show alarm summaryで severity 別カウントを確認できる
-
SONiC/doc/event-alarm-framework/event-alarm-framework.mdRev 0.3, Section 1 / 3.1.7 — ALARM テーブルの定義・スキーマ・redis 出力例。https://github.com/sonic-net/SONiC/blob/master/doc/event-alarm-framework/event-alarm-framework.md ↩ -
sonic-swss-common/common/schema.h:552—#define EVENT_CURRENT_ALARM_TABLE_NAME "ALARM"↩