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

v1.8.1 — アラートトリガー AI 診断 + ドキュメント大幅拡充

· 約8分で読めます

外部アラートシステムのイベントを受信し、相関分析 → 自動 AI 根本原因分析 → Slack 通知まで一括処理するパイプラインを追加しました。あわせて ADR 18 件、ランブック 5 件、モジュール CLAUDE.md 11 個、Web ガイド 2 ページ(KO+EN)が追加され、プロジェクトドキュメントが大幅に強化されました。

主な変更点

アラートトリガー AI 診断 (ADR-009) · 4 種ウェブフック (CloudWatch/Alertmanager/Grafana/Generic) · HMAC 認証 · Slack Block Kit · ADR 18 件新規 · ランブック 5 件新規 · Web ガイド拡充

アラートトリガー AI 診断 (ADR-009)

重大度 critical のインシデント発生時に、自動的に部分 AI 診断が実行されます。

パイプラインの流れ

[CloudWatch Alarm] → SNS Topic → SQS Queue

[EC2 Poller (15s)]

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

[alert-correlation.ts]

[alert-diagnosis.ts (AI)]

[Slack/SNS 送信]

サポートするソース

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

相関分析エンジン

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

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

スコープ制限付き自動診断

全体 15 セクション診断とは異なり、発火したアラートの範囲のみに制限され、1〜2 分以内に完了します:

  1. AlertContext のビルド — 影響を受けたサービス/リソース/ネームスペース、発火時刻(since)を抽出
  2. スコープ制限付き収集 — CloudWatch メトリクスを since 基準で ±10 分、該当リソースのみにフィルタリング
  3. 関連セクションの選択 — Compute / Network / Container など 3〜5 個のみ実行
  4. 変更検知 — Terraform state / CloudTrail の最近の変更を比較
  5. Bedrock Sonnet 分析 — 根本原因の推定 + Next Steps の提案
// src/lib/alert-diagnosis.ts (中核インターフェース)
interface AlertContext {
services: string[];
resources: string[];
namespaces: string[];
since: Date; // 発火時刻 − 10分
until: Date; // 発火時刻 + 10分
}

Slack 通知 (Block Kit)

重大度に応じたチャンネルルーティング + スレッド更新で動作します:

重大度デフォルトチャンネル
critical#incidents🔴 赤
warning#alerts🟠 オレンジ
info#alerts-low🔵 青
  • 最初のアラートはメインメッセージ、後続イベント(追加アラートのマージ、AI 診断結果、解決)は同一スレッドへの reply
  • Webhook モードと Bot Token モードの両方でスレッディングをサポート(thread_ts の再利用)
  • CloudWatch OK または Alertmanager resolved の受信時に ✅ 解決通知

HMAC 認証

共有シークレットは data/config.jsonalertWebhookSecret に保存します:

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"

アラートナレッジベース

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

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

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

ドキュメント大幅拡充

ADR 18 件新規 (011-028)

v1.8.0 で追加された機能の設計上の意思決定を公式化しました:

番号テーマ
ADR-011外部データソース統合(SSRF 防御 + allowlist)
ADR-012SNS 通知戦略
ADR-013自動収集調査エージェント
ADR-014レポート生成とスケジューリング
ADR-015AI ルーティングの優先順位
ADR-016Bedrock モデル選択戦略
ADR-017キャッシュウォーマーの設計
ADR-018Cognito 認証フロー
ADR-019SSE ストリーミング
ADR-020HMAC ウェブフック認証
ADR-021Admin Email 権限モデル
ADR-022CDK スタック分離
ADR-023マルチルート並列実行
ADR-024i18n(ko/en)サポート
ADR-025Code Interpreter サンドボックス
ADR-026CloudFront + Lambda@Edge
ADR-027OpenCost + Prometheus(EKS コスト)
ADR-028Memory Store(会話履歴)

ランブック 5 件新規

運用の現場で実際に使えるトラブルシューティング/設定ガイド:

  • alert-pipeline-troubleshoot.md — ウェブフックが届かないとき、相関分析がインシデントを作れないとき、Slack に表示されないとき
  • cache-warmer-operations.md — キャッシュウォーマーのデバッグ、クエリの追加/削除
  • cognito-auth-troubleshoot.md — Lambda@Edge、HttpOnly クッキー、OAuth2 コールバックの問題
  • deploy-flow.md — 11 段階デプロイスクリプトの運用マニュアル
  • multi-account-setup.md — Aggregator 設定、クロスアカウント IAM ロール、検証手順

モジュール CLAUDE.md 11 個新規

各ソースモジュールの役割/ルール/主要ファイルを Claude コンテキストファイルとして整理:

パス説明
docs/CLAUDE.mdドキュメント構成
runbooks/CLAUDE.mdランブックインデックス
decisions/CLAUDE.mdADR インデックス
agent/CLAUDE.mdStrands Agent + 19 Lambda
scripts/CLAUDE.md11 段階デプロイスクリプト
tests/CLAUDE.mdVitest 構成
infra-cdk/CLAUDE.mdCDK スタック構成
src/app/ai-diagnosis/CLAUDE.mdAI 総合診断ページ
src/app/alert-settings/CLAUDE.mdアラート設定ページ
src/app/k8s/CLAUDE.mdK8s ページ
src/lib/collectors/CLAUDE.md7 種 Auto-Collect エージェント

Web ガイド拡充

Docusaurus ガイドに v1.8 の機能を反映しました:

  • monitoring/ai-diagnosis.md — 15 セクション診断、エクスポート形式(DOCX/MD/PDF/PPTX)、スケジューリング、コスト管理のヒント
  • monitoring/alerts.md — アラートパイプラインの全体フロー、HMAC、相関分析、Slack スレッディング、ナレッジベース
  • intro.md — 40 ページ / 18 API / 11 AI ルートを反映、「AI 総合診断 & アラートパイプライン」機能ブロックを追加
  • faq/troubleshooting.md — Slack 通知の失敗 / AI 診断の部分失敗ケース
  • 韓国語(docs/)+ 英語(i18n/en/docusaurus-plugin-content-docs/current/)の両方に反映

バグ修正ハイライト

項目説明
webpack の動的 importコレクターの動的 import に /* webpackInclude: /\.(ts|tsx|js)$/ */ マジックコメントを追加 — CLAUDE.md が webpack context に含まれてビルドが失敗する問題を解決
Bedrock モデル IDアラート診断に global.anthropic.claude-sonnet-4-6 を使用
Slack スレッドの再利用Webhook モードでも thread_ts を保存して後続イベントに reply
レポートダウンロードS3 presigned URL の代わりにプロキシ URL を使用 — STS セッション期限切れ時の 404 を解決
SNS メールマークダウンをプレーンテキストに変換してから送信
キャッシュウォーマーMonitoring クエリを除外(CloudWatch FDW 呼び出しが pg Pool を枯渇させるため)
Silent なクッキー削除HttpOnly クッキーは POST /api/auth によるサーバーサイド削除

主なファイル変更

ファイル変更内容
src/app/api/alert-webhook/route.ts4 種ソースのウェブフック受信 + HMAC 検証 + 相関分析トリガー + アクティブインシデント GET
src/app/api/notification/route.tsSlack Block Kit / SNS 送信(重大度チャンネルルーティング、マークダウン→プレーンテキスト)
src/lib/alert-types.tsソース別の正規化関数(CloudWatch/Alertmanager/Grafana/Generic)
src/lib/alert-correlation.ts相関分析エンジン(30 秒バッファ、時間/サービス/リソースのマッチング)
src/lib/alert-diagnosis.ts診断オーケストレーター(戦略選択、並列コレクター、AlertContext スコープ)
src/lib/alert-knowledge.tsナレッジベース(JSONL 保存、月間サマリー、類似度検索)
src/lib/slack-notification.tsSlack クライアント(Bot Token/Webhook、スレッド更新)
src/lib/alert-sqs-poller.tsSQS バックグラウンドポーラー(SNS→SQS→EC2、DLQ、Rate Limit)
src/app/alert-settings/page.tsxアラート設定管理ページ(Admin 専用)
docs/decisions/ADR-011~028.md18 個の ADR を新規追加
docs/runbooks/*.md5 個のランブックを新規追加
web/docs/monitoring/ai-diagnosis.mdAI 総合診断ガイド
web/docs/monitoring/alerts.mdアラートパイプラインガイド

バージョン比較

項目v1.8.0v1.8.1変更
アラートパイプラインウェブフック + 相関分析 + AI 診断新規
サポートするアラートソース4 種 (CloudWatch/Alertmanager/Grafana/Generic)新規
Slack 通知Block Kit + スレッド更新新規
ADR10 個 (001-010)28 個 (001-028)+18
ランブック5 個新規
モジュール CLAUDE.md7 個18 個+11
Web ガイドページ3941+2 (ai-diagnosis, alerts)

参考

  • ADR-009: アラートトリガー AI 診断
  • ADR-012: SNS 通知戦略
  • ADR-013: 自動収集調査エージェント
  • ADR-020: HMAC ウェブフック認証