メインコンテンツへスキップ

アラートパイプライン

レガシーページ(v1 基準)

このページは v1 時代のアラートパイプライン(アラート連動診断が 15 セクション固定カタログから セクションを選択する構造・src/ パス)を基準に書かれています。現行 v2 の診断は Light / Mid / Deep(15+1 セクション、計 16 レンダー) のティア構造です — 最新の動作は FAQ · AI アシスタントを参照してください。

外部アラートシステムのイベントを AWSops で受信し、相関分析 → 自動 AI 診断 → Slack 通知まで一括で処理するパイプラインです。

対応ソース

ソース受信方式正規化
CloudWatch AlarmsSNS → SQS → EC2 ポーリングCloudWatch イベントスキーマ
Prometheus Alertmanager直接 Webhook (HMAC)Alertmanager v4 スキーマ
Grafana Alerting直接 Webhook (HMAC)Grafana unified alerting
Generic JSON直接 Webhook (HMAC)カスタムスキーママッピング

構成概要

[CloudWatch Alarm] → SNS Topic → SQS Queue

[EC2 Poller (15s)]

[Alertmanager/Grafana/Generic] → POST /awsops/api/alert-webhook

[alert-correlation.ts]

[alert-diagnosis.ts (AI)]

[Slack/SNS 発送]

詳細な設定手順はサーバー側のランブックにあります。

Webhook エンドポイント

POST /awsops/api/alert-webhook

パラメータ位置説明
X-Alert-SourceHeadercloudwatch, alertmanager, grafana, generic
X-Signature-256HeaderHMAC-SHA256 署名(共有シークレット)
BodyJSONソース別の元ペイロード

HMAC 署名

共有シークレットは data/config.jsonalertWebhookSecret に保存します。送信側は raw body を HMAC-SHA256 で署名し、X-Signature-256: sha256=<hex> ヘッダーとして送信する必要があります。

# Alertmanager webhook_configs の例
- url: https://awsops.example.com/awsops/api/alert-webhook
http_config:
authorization:
type: HMAC
credentials: "<共有シークレット>"

GET /awsops/api/alert-webhook

アクティブなインシデント一覧を取得します。ダッシュボード上部の 🚨 バッジおよびホーム画面の「Recent Incidents」カードがこの API を 30 秒周期でポーリングします。

{
"activeCounts": { "total": 3, "critical": 1, "warning": 2 },
"activeIncidents": [
{
"id": "inc-20260422-093015",
"severity": "critical",
"status": "investigating",
"alertCount": 7,
"affectedServices": ["payment-api", "order-service"],
"topAlertName": "HTTPErrorRateHigh"
}
]
}

相関分析エンジン

src/lib/alert-correlation.ts が以下の基準で個別アラートをインシデントにグループ化します:

基準デフォルト値説明
時間ウィンドウ5 分同一サービスで 5 分以内に発生したアラートをマージ
共通サービス1 件以上labels.service または resource が一致
共通ネームスペース1 件以上K8s アラートの labels.namespace が一致
重複排除1 分同一 fingerprint のアラートを 1 分以内は重複抑制
重大度エスカレーションwarningcriticalwarning 3 件が 5 分以内 → critical に昇格

自動 AI 診断

重大度 critical のインシデントは自動的に部分 AI 診断をトリガーします:

  1. AlertContext のビルド: 影響を受けたサービス、リソース、ネームスペース、発火時刻(since)を抽出
  2. スコープ限定の収集: CloudWatch メトリクスクエリを since 基準の ±10 分、該当リソースのみにフィルタリング
  3. 関連セクションの選択: 15 セクションのうち Compute / Network / Container など 3〜5 個のみ実行
  4. 変更検知: Terraform state / CloudTrail の最近の変更と比較
  5. Bedrock 分析: Claude Sonnet で根本原因の推定 + Next Steps の提案
フル診断との違い

AI 総合診断は 15 セクション全体を全リソース対象で実行しますが、Alert-Triggered Diagnosis は発火したアラートの範囲のみに限定され、1〜2 分以内に完了します。

Slack 通知

Block Kit メッセージ

重大度に応じて以下のチャンネルにルーティングされます(data/config.jsonslackChannels):

重大度デフォルトチャンネル
critical#incidents
warning#alertsオレンジ
info#alerts-low

スレッド更新

インシデントの最初の通知はメインメッセージとして、後続イベント(追加アラートのマージ、AI 診断結果、解決通知)は同一スレッドへの reply として投稿されます。Slack Webhook モードと Bot Token モードの両方で動作します。

解決通知

CloudWatch の OK 状態または Alertmanager の resolved イベントを受信すると、元のスレッドに ✅ 解決通知を追加します。

アラートナレッジベース

data/alert-diagnosis/ の下に診断記録が永続保存されます:

ファイル内容
incidents/<id>.json個別インシデント + AI 診断結果
summary-<YYYY-MM>.json月間統計(top services、alert names、resolution time)

UI の Knowledge Base タブで過去の類似インシデントを検索でき、新しいインシデント発生時には類似度ベースで自動推薦されます。

アラートノイズ制御

Silence ウィンドウ

特定のラベル組み合わせを一定時間抑制できます:

{
"silences": [
{
"matcher": { "service": "batch-job", "alertname": "HighCPU" },
"startsAt": "2026-04-22T00:00:00Z",
"endsAt": "2026-04-22T06:00:00Z",
"reason": "夜間バッチウィンドウ"
}
]
}

重複抑制

同一 fingerprint + 1 分以内 → 自動的に無視。

使用のヒント

テストイベントの送信

curl -X POST https://awsops.example.com/awsops/api/alert-webhook \
-H 'X-Alert-Source: generic' \
-H "X-Signature-256: sha256=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')" \
-H 'Content-Type: application/json' \
-d "$BODY"

アクティブなインシデントの確認

ダッシュボードヘッダーの 🚨 バッジをクリックすると /ai-diagnosis ページへ移動し、進行中のインシデントの詳細ビューを確認できます。

通知が届かないとき

サーバー側ランブック alert-pipeline-troubleshoot.md に症状別のチェックリストがあります。

関連ページ

参考

  • ADR-009: アラートトリガー AI 診断
  • ADR-012: SNS 通知戦略
  • ADR-013: 自動収集調査エージェント