InfraGuard

警報

システム・Web・DB・セキュリティの条件をまとめた警報グループポリシーを作成します。違反時には担当者へ SMS とメールで自動通知します。

概要 — 何をする画面か

インフラ ▸ 警報(/infra/alert)は 警報グループ(ポリシー)コンソール です。運用者は 4つの領域(システム / Web / DB / セキュリティ) にまたがる条件を1つのポリシー(infr_alert_policy)に追加し、各しきい値の 係数(factor) を画面上で調整します。違反が発生すると、そのグループの 担当者(infr_alert_recipient)へ SMS/メールで自動通知 されます。

旧「キャパシティ・警報」ページ(/infra/capacity)を置き換えたもので、現在は当画面へリダイレクトされます。

主な特徴:

この画面が管理するのは ポリシー・警報・配信履歴 のみです。サーバー個別のグラフは サーバー、Web の稼働状況は サービス ▸ Web、DB の負荷は サービス ▸ データベース を参照してください。しきい値の既定値は 運用ポリシー で定義します。

こんなときに使う

画面構成

ポリシーカードのグリッド

各ポリシーは1枚のカードとして描画され、有効トグル、重大度バッジ、有効な領域、担当者数を要約します。操作は次のとおりです:

操作 説明 アクセス権限
有効/一時停止トグル is_active — スケジューラが評価するかどうか レベル2以上
編集 領域・条件・チャネル・担当者のモーダル レベル2以上
今すぐ検査 このポリシーを即座に評価して配信(run) レベル2以上
テスト 担当者へテストメール/SMS を今すぐ送信(test) レベル2以上
削除 ポリシーと担当者を削除 レベル2以上
ドラッグで並べ替え 表示/評価の順序(seq, reorder) レベル2以上

編集モーダル(領域・条件・チャネル・担当者)

最近の警報フィード

infr_alert を last_seen の降順で最大60行表示します(30秒ポーリング)。各行には観測値、しきい値、集約された count、送信の 成功/総数(infr_alert_delivery 由来)が表示され、[確認] と [クローズ] で状態を遷移できます。

使い方

1) ポリシーを作成する

  1. [警報グループを新規作成] → 名称、重大度、クールダウンを入力します。
  2. 監視したい 領域 を有効にします。
  3. 領域ごとに 条件 を有効にし、しきい値の係数を調整します。既定値は 運用ポリシー の alertDefaults() からプリフィルされます。
  4. チャネル(SMS/メール)を選び、担当者 を追加します。
  5. 保存します。

2) 条件カタログ

システム(server_status、seq ウィンドウ)

条件 トグル 係数 既定値 発行されるメトリック
ロードアベレージ超過 sys_load_on sys_load_max 20 load_avg(>20、サーバー単位)
ディスク空き容量不足 sys_disk_on sys_disk_free_mb 500 disk_free(<500MB)

Web(ライブ HTTP プローブ・infr_web_cert)

条件 トグル 係数 既定値 発行されるメトリック
サービス停止(ステータス ≠ 期待値) web_code_on web_expect_code 200 http_status
応答時間超過 web_latency_on web_latency_ms 5000 latency
証明書の期限切れが間近 web_cert_on web_cert_hours 48 cert_expiry

「証明書の期限切れが間近」を有効にするだけで、すべてのサイトの証明書を監視できます。サイト単位ではなく、全ドメインを対象とした全体スキャンです。

データベース(infr_db_metric の最新サンプル)

条件 トグル 係数 既定値 発行されるメトリック
待機キューの増加 db_waiting_on db_waiting_max 5 db_waiting(>=5)
1時間あたりのスロークエリ db_slow_on db_slow_per_hour 60 db_slow(slow_qps×3600 >= 60)

セキュリティ(legacy_glory の検知テーブル・複合)

評価ウィンドウは sec_window_min(既定10分)です。いずれか1つのシグナルがしきい値を超えると違反が発生します。

条件 トグル 係数 既定値 ソース
IDS 重大度+件数 sec_ids_on sec_ids_severity, sec_ids_count 2, 20 suricata_alert_ct(重大度≥S、ウィンドウ内の件数≥N)
AI 異常ブロックの急増 sec_kitsune_on sec_kitsune_count 5 kitsune_detail_log(is_blocked=1、件数≥N)
新規ブロック IP の急増 sec_blacklist_on sec_blacklist_count 10 blacklist_info(ウィンドウ内の新しい created_at、件数≥N)

関連: 脅威 · 検知 · ブロックリスト。

3) 今すぐ検査/テスト

4) 自動評価(スケジュール)

有効なポリシーは毎分、自動的に評価・配信されます。

Schedule::command('infr:eval-alerts --quiet-if-ok')
    ->everyMinute()
    ->withoutOverlapping(2)
    ->onOneServer()
    ->when($is_leader);

手動実行:

# 有効なすべてのポリシーを評価(単発実行。実行後に終了する — デーモンではない)
php artisan infr:eval-alerts

# 特定のポリシーのみ
php artisan infr:eval-alerts --policy=12

# 違反がない場合は出力を抑止(スケジューラの既定)
php artisan infr:eval-alerts --quiet-if-ok

infr:eval-alerts は 実行後に終了する単発コマンド です(ポリシーをループしてから戻ります)。決して無限ループのデーモンに変えないでください — 終了しないデーモンをスケジューラから起動すると、共有 DB の接続を使い果たします(pulse:check の接続リーク事例を参照)。スケジューラは毎分、新しいインスタンスを安全に起動します。

データソース

書き込みテーブル(新規 infr_)

テーブル マイグレーション 役割
infr_alert_policy 000700 警報グループ(ポリシー)。scopes/targets/conditions/channels の JSON + 重大度、cooldown_min、seq
infr_alert_recipient 000701 ポリシーごとの担当者(インライン)。email/phone + via_mail/via_sms/is_active/seq
infr_alert 000702 警報インスタンス(発火ログ/トリアージキュー)。重複排除キー (policy_id, metric, entity_key, status='open')、notified_at によるクールダウン
infr_alert_delivery 000703 配信履歴。channel/address/ok/provider_code/message_id/error/latency_ms

読み取りソース(レガシー+新規、読み取り専用)

重複排除/クールダウン/自動クローズの流れ

  1. AlertEvaluator::evaluate($policy) → 有効な領域ごとの違反候補の配列。領域ごとの例外は隔離されます(1つの領域の失敗が他の領域を妨げません)。
  2. AlertDispatcher::handle($policy, $breaches):
    • 各違反は (policy_id, metric, entity_key, status=open) で検索され、見つかれば更新して count++、見つからなければ新規挿入します(first_seen、count=1、notified_at=null)。
    • 通知対象 = 新規 または notified_at が null または notified_at <= now - cooldown_min。
    • 自動クローズ: 今回の違反に含まれない、このポリシーのオープンな警報 → status='closed'。
    • バッチ送信: 通知対象の警報は、担当者ごと・チャネルごとに 1通のメッセージ にまとめられます(本文は最大8行、超過分は「+N more」、SMS は140文字で打ち切り)。送信後、各対象の notified_at=now を設定します。
    • (担当者、チャネル)ごとに infr_alert_delivery を1行記録します。

アクセス権限

操作 最小レベル 監査
コンソール/一覧/フィードの閲覧(index/list/feed) 1(読み取り) —
ポリシーの保存/削除/並べ替え(save/delete/reorder) 2(書き込み) alert_policy.create / .update / .delete
警報の確認/クローズ 2 alert.ack / alert.closed
今すぐ検査(run) 2 送信時に alert.fire
テスト送信(test) 2 alert.test
スケジュールによる自動送信 (システム) alert.fire

レベルの区分: demo=1 · staff=5 · admin=10。読み取りにはレベル1以上、書き込みと配信にはレベル2以上が必要です。破壊的操作および配信操作はすべて infr_audit_log に記録されます(監査ログ を参照)。配信チャネルのプロバイダーは管理者(レベル10以上)が設定します。

トラブルシューティングと FAQ

Q. 条件を有効にしたのに警報が届きません。

  1. ポリシーが 有効 であること、スケジューラ(schedule:work /本番のスーパーバイザー)が稼働していることを確認します。
  2. チャネルのプロバイダーがない — カードの警告を確認し、メールアダプター/SMSアダプター で既定のプロバイダーを設定します。
  3. 担当者の via_mail/via_sms とポリシーのチャネルの 積集合 が空でないこと、メールアドレス/電話番号が入力されていることを確認します。
  4. クールダウン中 は再送が抑止されます(cooldown_min、既定30分)。[今すぐ検査]ですぐ確認できますが、すでに通知済みの警報はクールダウン経過後にのみ再送されます。

Q. DB/システムの条件が発火しません。

Q. 証明書の期限監視は特定のサイトだけを見るのですか?

Q. 同じ違反が積み上がり続けますか?

Q. Web プローブは評価を遅くしませんか?

関連項目

경보 — 정책 카드와 최근 경보 피드
경보 — 정책 카드와 최근 경보 피드