SaaS 企業の運用担当が、監視のアラートと外部サービスの障害通知を n8n で集め、前回の連絡からの変化を要約して、お客様向けの状況の連絡の下書きを作る
障害の最中に監視ツールから届くアラートと、決済やメール配信などの依存先のサービスから届く障害通知を n8n で1か所に集め、15分ごとに「前回の連絡から何が変わったか」を要約します。要約からお客様向けの続報の下書きを作り、対応の責任者の承認に回します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Make/n8n/Power Automate/Zapier
- 対象業界
- EC/IT・SaaS/金融
- 対象部門
- カスタマーサポート/情報システム
- 対象業務
- 書類作成/要約
- 主な課題
- 人手が足りない/情報が見つからない/書類作成に時間がかかる
- AIで行う処理
- 要約
- 主な効果
- 品質標準化/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 当番が Slack のアラートのチャンネルで、前回の連絡の後に届いたアラートを遡って読む
- 依存先のステータスページを1つずつ開き、障害の告知が出ていないかを確かめる
- アラートの名前から、お客様に見える機能(注文の受付、決済、メールの送信など)のどれに当たるかを考える
- 前回の連絡を開き、何が変わったかを考える
- 続報の文面を書き、対応の責任者に Slack で見てもらう
- 責任者の了承を受けて、ステータスページに掲載する
- 自動監視ツールのアラートと、依存先のステータスページの障害通知が、n8n の受け口に届くたびに記録される
- 人当番が障害の対応を始めたら、Slack から「対応中」を宣言する(障害の記録が開く)
- 自動障害の記録が開いている間、15分ごとに n8n が動き、前回の連絡の後に届いた記録を取り出す
- 自動プログラムが、アラートを症状ごとにまとめ、続いている数と解消した数、始まった時刻を数える
- 自動Claude が、数えた結果と依存先の通知から、機能ごとの変化を要約し、続報の下書きを作る
- 自動要約と下書きを Slack で対応の責任者に送り、承認を待つ
- 人責任者が下書きを直して承認し、カスタマーサポートがステータスページに掲載する
- 自動掲載した時刻を「前回の連絡」として記録する
各工程の詳しい説明を読む
- 当番が Slack のアラートのチャンネルで、前回の連絡の後に届いたアラートを遡って読む
- 依存先のステータスページを1つずつ開き、障害の告知が出ていないかを確かめる
- アラートの名前から、お客様に見える機能(注文の受付、決済、メールの送信など)のどれに当たるかを考える
- 前回の連絡を開き、何が変わったかを考える
- 続報の文面を書き、対応の責任者に Slack で見てもらう
- 責任者の了承を受けて、ステータスページに掲載する
(a)アラートが多すぎて全体が見えない。 1つの障害で、同じ症状のアラートが別のサーバーから何十件も届きます。1番目で遡って読む間に、もう次の続報の時刻が近づいています。 解消したアラートと続いているアラートが混ざって並び、いま何件が続いているのかを数えるだけで時間がかかります。
(b)依存先の通知を見落とす。 2番目は、依存先が4つあれば4つの画面を開く作業です。急いでいると開くのを省き、決済代行が30分前に障害を告知していたことに、お客様からの問い合わせで気づきます。
(c)続報が前回の繰り返しになる。 4番目の「何が変わったか」は、前回の文面と、その後のアラートを頭の中で比べる作業です。疲れてくると比べるのをやめ、前回の文面の時刻だけを直して出すことになります。 お客様から見ると、30分たっても何も進んでいないように見えます。
- 【自動】 監視ツールのアラートと、依存先のステータスページの障害通知が、n8n の受け口に届くたびに記録される
- 【人】 当番が障害の対応を始めたら、Slack から「対応中」を宣言する(障害の記録が開く)
- 【自動】 障害の記録が開いている間、15分ごとに n8n が動き、前回の連絡の後に届いた記録を取り出す
- 【自動】 プログラムが、アラートを症状ごとにまとめ、続いている数と解消した数、始まった時刻を数える
- 【自動】 Claude が、数えた結果と依存先の通知から、機能ごとの変化を要約し、続報の下書きを作る
- 【自動】 要約と下書きを Slack で対応の責任者に送り、承認を待つ
- 【人】 責任者が下書きを直して承認し、カスタマーサポートがステータスページに掲載する
- 【自動】 掲載した時刻を「前回の連絡」として記録する
4番目と5番目を分けているのが、この構成の要です。 何件続いているか、いつ始まったかは数えればよいことで、AIに数えさせると誤ります。プログラムが数え、AIはその結果を言葉にするだけです。
8番目の「前回の連絡」の時刻が、次の要約の起点になります。 承認されずに見送られた下書きは前回の連絡に数えません。お客様に実際に届いた連絡からの変化を、次の続報に書くためです。
02今回想定するシステム構成
Grafana のアラート(Webhook の通知先) 依存先のステータスページ(Webhook の購読)
│ │
▼【受け口】Webhook ノード(アラート用) ▼【受け口】Webhook ノード(依存先用)
n8n ── Data table「events」に1件ずつ記録(症状・機能・状態・時刻)
│
▼【トリガー】Schedule Trigger(15分ごと)
n8n ── Data table「incidents」で対応中の障害があるかを見る
├──▶ 前回の連絡の後の events を取り出す
├──▶ Code ノード:fingerprint でまとめ、続いている数・解消した数・始まった時刻を数える
▼
Basic LLM Chain + Anthropic Chat Model + Structured Output Parser
│ 機能ごとの変化の要約と、続報の下書き
▼
Slack(Send and Wait for Response)── 対応の責任者が承認
▼
【人】ステータスページに掲載 → 前回の連絡の時刻を記録| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | n8n(Webhook、Schedule Trigger、Data table、Code、Aggregate、Slack) | Make、Power Automate、Zapier |
| 生成AI | Claude(n8n の Anthropic Chat Model から) | ChatGPT(OpenAI)、Gemini |
| 監視 | Grafana のアラート(Webhook の通知先) | Datadog、PagerDuty |
| 依存先の通知 | 各社のステータスページの Webhook の購読 | 各社の RSS・メールの購読 |
新しく入れるのは n8n と、Claude の API です。 監視ツールとステータスページはいまのものを使います。最初の準備は、アラートの名前とお客様に見える機能の対応表(「機能の対応表」)を作ることです。 「api-payment の 5xx 率」は「決済」、「mailer の送信の遅れ」は「注文確認のメール」のように、アラートの名前から機能を引けるようにします。
AIの部分は、n8n の Basic LLM Chain に Anthropic Chat Model をつないだものです。 Basic LLM Chain で「Require Specific Output Format」を有効にすると出力の決まりを守らせるパーサーをつなげ、Structured Output Parser で JSON の形を決めます。 Anthropic Chat Model ではモデル、出力の長さの上限、温度などを選べ、システムプロンプトなどを一時的に保存する Prompt Caching(既定は無効)も選べます。
03どうやって実装するのか
処理の起点を決める
起点は3つあります。 アラートの受け口、依存先の通知の受け口、15分ごとの定時です。
アラートは、Grafana のアラートの通知先(contact point)に Webhook を足して n8n に送ります。 Grafana は似たアラートをまとめて1回の通知にし、status(firing か resolved)と、アラートごとの labels・startsAt・endsAt・fingerprint などを送ってきます。n8n の Webhook ノードは、公開(publish)したときに本番の URL が有効になります。 テスト用の URL は、エディタで待ち受けている間しか動きません。
依存先の通知は、各社のステータスページの購読で受けます。 Atlassian の Statuspage で作られたステータスページは、運営者が Webhook の通知を有効にしていれば、購読の欄で Webhook を選んで受け口の URL を登録できます。障害の告知の作成と更新、機能(component)の状態の変化のときに送られてきます。 Webhook の購読が無い依存先は、RSS やメールの購読で代わりにします。
依存先の受け口は、すぐに応答を返す設定にします。 Statuspage は受け口に30秒以内に 2xx の応答を求め、3xx は失敗と見なします。Webhook ノードの応答のしかたを「Immediately」にして、記録の処理は応答の後に回します。
要約は15分ごとの Schedule Trigger で動かします。 社内の決まりの30分に対して、15分ごとに下書きを用意しておけば、責任者は手の空いたときに最新の下書きを承認できます。Schedule Trigger はワークフローの時間帯の設定を使い、無ければインスタンスの時間帯(自前で動かす場合の既定は America/New_York)を使います。 時刻を下書きに書くので、ワークフローの時間帯を Asia/Tokyo にしておきます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| アラート | status、labels(アラートの名前・サービス・地域)、startsAt、endsAt、fingerprint | Grafana の Webhook |
| 依存先の通知 | 依存先の名前、incident の incident_updates(状態と本文)、component_update(前と後の状態) | 各社のステータスページの Webhook |
| 障害の記録 | 対応中の障害、宣言した時刻、前回の連絡の時刻と本文 | Data table「incidents」 |
| 機能の対応表 | アラートの名前・ラベル → お客様に見える機能 | Data table「feature_map」 |
| 依存先の対応表 | 依存先の機能(component)→ 自社のどの機能が使っているか | Data table「dependency_map」 |
質を決めるのは、下の2つの対応表です。 アラートの名前のままでは、お客様に伝わる文になりません。対応表に無いアラートは、AIに機能を推させず「未対応のアラート」として下書きの外に出し、当番に知らせます。
依存先の対応表は、依存先の通知を自社の機能に結びつける表です。 決済代行の「Card payments」の障害は自社の「決済」に、メール配信の「Email sending」の遅れは「注文確認のメール」に当たる、と書いておきます。
データの取得方法を決める
受け口に届いたものは、すぐに Data table「events」に1件ずつ書き込みます。 n8n の Data table は、行の追加・取得・更新・追加か更新(upsert)・削除ができる表で、取得では条件で絞れます。
| 列 | アラート | 依存先の通知 |
|---|---|---|
| source | alert | vendor |
| key | fingerprint | 依存先の名前と component の ID |
| feature | 機能の対応表で引いた機能 | 依存先の対応表で引いた機能 |
| state | firing/resolved | 新しい状態(major_outage など)、または告知の状態 |
| started_at・ended_at | startsAt・endsAt | 告知の時刻 |
| body | アラートの要約の注釈 | 告知の本文 |
| received_at | 受けた時刻 | 受けた時刻 |
endsAt には注意が要ります。 解消していないアラートの endsAt には 0001-01-01T00:00:00Z という仮の値が入ります。これをそのまま時刻として扱うと、西暦1年に解消したことになります。 書き込むときに、この値なら空にします。
要約の段では、Data table「incidents」から前回の連絡の時刻を取り、「events」から received_at がそれより後の行を条件で絞って取り出します。 前回の連絡より前に始まり、いまも続いているアラートは、key ごとの最新の状態で拾います。
AIへ渡す前に整形する
- 同じアラートをまとめる … Code ノードで、
fingerprintが同じ行を1つにまとめ、最新のstateを残します。Grafana では、同じラベルのアラートは同じfingerprintを持ちます - 機能ごとに数える … 機能ごとに、続いているアラートの数、前回の連絡の後に新しく出た数、解消した数、最も早い開始の時刻を数えます
- 依存先の通知を並べる … 前回の連絡の後に届いた依存先の通知を、時刻の順に並べ、本文を短く切ります
- 時間の重なりを印にする … 依存先の通知の機能と、自社のアラートの機能が同じで、時刻が重なっていれば
overlap: trueの印を付けます - まとめて1件にする … Aggregate ノードで、機能ごとの行を1つの一覧にまとめ、AIに1回で渡します
- アラートの通知が切り詰められていないかを見る … Grafana の通知先の「Max Alerts」で上限を設けていると、超えた分は落とされ、
truncatedAlertsに数が入ります。0でなければ、数が実際より少ないことを下書きの注記に入れます
2番目と4番目は、AIに任せたくなるところです。 「何件続いているか」「時間が重なっているか」は数と時刻の比較で、プログラムなら毎回同じ答えを出します。 Code ノードは JavaScript か Python で書けます。なお、Code ノードの中ではファイルの読み書きや HTTP の呼び出しはできないので、Data table の読み書きはノードで行います。
4番目の印は「重なっている」だけです。 原因かどうかは、この段でも次の段でも決めません。
AIに処理させる
させるのは、前処理の結果を、機能ごとの変化として要約し、続報の下書きを作ることだけです。
| 要約するもの | 書き方 | 材料が無いとき |
|---|---|---|
| 機能ごとの変化 | worse(広がった)/same(変わらない)/better(一部戻った)/recovered(戻った)と、その根拠の数 | 前回と同じ材料しか無ければ same |
| 依存先の動き | 依存先が告知した状態の変化を、自社の機能の名前で | 無ければ空 |
| 時間の重なり | overlap の印のある機能を、事実として | 無ければ空 |
| 続報の下書き | 機能の名前、症状、変化、次の連絡の予定時刻 | - |
| 当番への注記 | 未対応のアラート、切り詰められた通知 | 無ければ空 |
変化の判断は、数の比較を言葉にするだけです。 前回の連絡の時点で「決済」のアラートが3件続いていて、いま5件なら worse、1件なら better です。その数は前処理で出してあり、AIはそれを見て選ぶだけです。 数が変わらず、新しい材料も無ければ same と書き、続報には「状況に大きな変化はありません。引き続き調査しています」と書かせます。無理に変化を作らせないことが、続報の信頼を保ちます。
| させないこと | 理由 |
|---|---|
| 原因の推定 | 依存先の障害と時刻が重なっていても、原因とは限らない |
| 依存先の名前をお客様向けの文に出すこと | 出すかは責任者が決める。下書きでは「外部のサービス」と書く |
| 復旧の見込みの時刻 | 当番が見込みを書いていなければ書かない |
| 影響の割合(「約3割のお客様」など) | アラートの数はお客様の割合ではない |
| アラートの数の数え直し | 前処理の数をそのまま使う |
4行目が気づきにくい失敗です。 「決済のアラートが10台のうち3台」を、生成AIは「約3割のお客様で決済に失敗」と書きます。サーバーの台数とお客様の割合は別のもので、そう書かれた続報は後で訂正することになります。
指示内容を固定する
あなたは SaaS 企業の障害対応で、お客様向けの続報の下書きを作る係です。
前回の連絡の後に届いた情報を、機能ごとの「変化」として要約します。
原因の判断はしません。
【材料】
- 前回の連絡の時刻と本文: {last_notice}
- 機能ごとの集計(前処理で数えたもの): {feature_stats}
各機能に、前回の時点で続いていた数、いま続いている数、新しく出た数、解消した数、
最も早い開始の時刻があります。
- 依存先の通知(時刻の順): {vendor_updates}
- 時間の重なりの印: {overlaps}
- 当番が書いた確定事項(あれば): {confirmed_facts}
【やること】
1. 機能ごとに change を worse / same / better / recovered から選び、
根拠にした数を evidence に書いてください。
2. 依存先の通知を、自社の機能の名前で vendor_note に短くまとめてください。
3. お客様向けの続報の下書きを draft に書いてください。
- 前回の連絡から変わったことを先に書きます。
- 変化が無ければ「状況に大きな変化はありません」と書きます。
- 最後に「次回は {next_time} ごろにお知らせします」と書きます。
【厳守事項】
- 数は【材料】の集計をそのまま使い、数え直さないでください。
- 原因を書かないでください。依存先の障害と時刻が重なっていても、
「〜が原因」「〜の影響で」と書かないでください。
- draft に依存先の会社名やサービス名を書かないでください。「外部のサービス」とします。
- アラートの数を、お客様の割合や人数に言い換えないでください。
- 復旧の見込みは、確定事項に書かれている場合だけ書いてください。
- アラートの名前やサーバー名を draft に書かないでください。機能の名前で書きます。
- 材料に無いことを書かないでください。
「変化が無ければ変化が無いと書く」を明記しないと、AIは何かしら進展を書こうとします。 「調査が進んでいます」「対応を進めています」のような、材料に無い進展です。お客様は次の続報でそれが何だったのかを期待します。
「〜の影響で」を禁じているのは、「原因」という言葉を避けても因果を書けるからです。 「決済代行の障害の影響で決済が遅れています」は、原因を断定した文です。時間の重なりは当番への注記に書き、お客様向けの文には入れません。
出力形式を固定する
Structured Output Parser で、次の形の JSON を受け取ります。
{
"features": [
{
"feature": "決済",
"change": "worse",
"evidence": "続いているアラート 3→5、新規 2、解消 0",
"overlap": true
},
{
"feature": "注文確認のメール",
"change": "recovered",
"evidence": "続いているアラート 2→0、解消 2",
"overlap": false
}
],
"vendor_note": "決済で使う外部サービスが 14:05 にカード決済の部分的な障害を告知",
"draft": "【続報 14:30】決済の処理で、エラーとなる事象が引き続き発生しており、14:00 以降に発生の範囲が広がっています。注文確認のメールの遅れは解消しました。…次回は 15:00 ごろにお知らせします。",
"notes_for_oncall": ["未対応のアラート: batch-export-lag(機能の対応表に無し)"]
}
1つ目の理由は、責任者が要約と下書きを分けて見られることです。 features の evidence を見れば、下書きの「広がっています」の根拠が数で分かります。下書きだけを見せると、責任者はその根拠を確かめに監視の画面を開くことになります。
2つ目は、notes_for_oncall を下書きと分けて置けることです。 時間の重なりや未対応のアラートは当番が知るべきことで、お客様に出すものではありません。
Structured Output Parser の形は、JSON の例から作るか、JSON Schema で書きます。例から作ると、すべての項目が必須になります。 JSON Schema の $ref(参照)は使えないので、入れ子の形は直接書きます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Grafana | Webhook の通知先 → n8n の Webhook ノード | アラートを受ける |
| 依存先のステータスページ | Webhook の購読 → n8n の Webhook ノード | 障害の告知と機能の状態の変化を受ける |
| Data table | n8n の Data table ノード | 記録・障害の記録・対応表 |
| Claude | Anthropic Chat Model(Basic LLM Chain の下) | 要約と下書き |
| Slack | Slack ノードの Send and Wait for Response | 責任者に送り、承認を待つ |
受け口は守りを固めます。 Webhook ノードは、Basic 認証・ヘッダーの認証・JWT などで呼び出し元を確かめられ、IP の許可リストも設定できます。Grafana からの受け口は、Grafana の通知先の認証(Basic 認証か Authorization ヘッダー)と合わせます。 Grafana は送る内容に HMAC-SHA256 の署名を付けることもできます。Statuspage の送信元の IP は固定されておらず、決まった範囲もないとされているので、IP の許可リストでは絞れません。 受け口の URL を推測されにくいものにし、届いた内容のページの ID が登録した依存先のものかを確かめます。
Slack の Send and Wait for Response は、送った後に相手の返事を待ってから先へ進みます。 責任者は Slack の上で承認でき、承認を受けて「前回の連絡」の記録を更新します。ステータスページへの掲載は、この構成では行いません。 掲載はカスタマーサポートが行い、その時刻を Slack で返してもらって記録します。
人が確認する
下書きはすべて、対応の責任者が見て承認します。 確かめるのは3つです。
- 変化の向き …
worse・betterが、当番の把握と合っているか。監視の数と、実際のお客様への影響がずれていることがあります - 書いてよいこと … 依存先のことを書くか、復旧の見込みを書くか。依存先の障害が明らかに原因と確かめられた場合だけ、責任者が書き足します
- 言葉づかい … 社内の決まりの言い回しに合っているか
当番は、下書きの材料を足せます。 Slack から「確定事項」を書き込むと、Data table「incidents」に残り、次の要約の材料に入ります。「原因は決済の処理の設定の誤りと特定」のような確定した事実だけを書きます。 推測は書きません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 対応表に無いアラート | 下書きに入れず、notes_for_oncall で当番へ |
| アラートの通知が切り詰められる | truncatedAlerts が0でなければ、数が少ない旨を注記 |
| 依存先の受け口が30秒以内に応答できない | 応答を「Immediately」にし、処理は後へ |
| 依存先の通知が来ない | 依存先の対応表に「最後に受けた時刻」を持ち、長く来ていなければ RSS で確かめる |
| AIの応答が形に合わない | 下書きを作らず、前処理の集計だけを責任者へ送る |
| AIの API が止まっている | 同上。集計だけでも続報は書ける |
| 障害の記録が開いたまま | 最後のアラートの解消から一定の時間が過ぎたら、当番に閉じるかを聞く |
| 夜間の障害 | 責任者が当番を兼ねる。承認の待ち時間に上限を設けず、15分ごとの下書きを上書きで送る |
5行目と6行目の「集計だけを送る」が大事です。 AIが動かなくても、機能ごとの数と依存先の通知が並んでいれば、当番は第3章の1番目と2番目を省いて続報を書けます。 AIの段を、この構成の止まる場所にしません。
記録を残す
- Data table「events」の全行(アラートと依存先の通知、受けた時刻)
- 15分ごとの前処理の集計と、AIの出力の全文
- 責任者が直した下書きと、直す前の下書き
- 掲載した続報の本文と時刻
- 障害ごとの、連絡の間隔(前回の連絡から次の連絡まで)
- 未対応のアラートが出た回数
3つ目の「直す前と直した後」は、指示を直す材料です。 責任者が毎回「〜の影響で」を消しているなら、禁止が効いていません。5つ目の続報の間隔は、障害の後の振り返りの材料になります。
04実装レベルの3段階
本記事の想定は半自動化です。 当番に残るのは確定事項の書き込み、責任者に残るのは下書きの確認と承認です。1件30分が12分になる見込みはこの段階のものです。 本格構成で掲載まで自動にする場合も、承認は残します。 承認の後の貼り付けの手間を省くだけで、お客様に出す文を人が見ないで出す形にはしません。
05工数削減シミュレーション
導入後 60件 × 12分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 決済代行・メール配信・SMS 配信・クラウドなど複数の外部サービスに依存する SaaS を運営し、障害の最中にお客様向けのステータスページへ続報を定期的に出している企業。障害のたびにアラートが数十件届き、当番が対応の合間にアラートと依存先の通知を読み比べて続報を書いているため、続報が遅れたり、内容が前回とほとんど同じになったりしている場合。
- 障害の連絡をお客様に出す運用が無い、または年に数回しか無い場合。監視ツールのアラートが外部へ送れない環境の場合。障害の原因の判断や、お客様への連絡の送信そのものを自動化したい場合は、この構成では扱いません。
07最小構成で試す方法
- 先月の障害から3件を選び、それぞれの障害の間に届いたアラートと、依存先のステータスページの告知を書き出す
- 実際に出した続報を、時刻とともに並べる
- 続報ごとに、前回の連絡の後に届いたアラートを手で数え、機能ごとの「前回の数・いまの数・新規・解消」の表を作る
- 手元の生成AI(Claude、ChatGPT、Gemini など)の画面に、第7章のプロンプトと、3番目の表、依存先の告知を貼り付ける
- 出てきた下書きを、実際に出した続報と比べる
最小構成では、数えるのは人です。 確かめるのは、数を渡せば、変化を正しく言葉にできるかです。
| 出てきた内容 | 判断 |
|---|---|
| 実際の続報より変化がはっきり書かれている | n8n での組み立てに進む |
| 依存先が原因であるかのように書く | 「〜の影響で」の禁止を確かめる |
| 材料に無い進展が書かれる | 「変化が無ければ無いと書く」を強める |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 続報が前回の繰り返しになる | 前回の連絡の後の材料だけを渡し、変化を書かせる |
| 依存先が原因であるかのように書く | 「〜が原因」「〜の影響で」を禁じ、重なりは当番への注記に |
| アラートの数がお客様の割合に言い換えられる | 言い換えを禁じる |
| 解消していないアラートの終了時刻が古い日付になる | 0001-01-01T00:00:00Z を空にする |
| アラートの通知が上限で切り詰められる | truncatedAlerts を見て注記する |
| 依存先の受け口が失敗と見なされる | 30秒以内に 2xx。応答を「Immediately」に |
| 対応表に無いアラートを AI が推して機能に当てる | 対応表に無いものは下書きの外に出す |
| AI が止まると続報も止まる | 集計だけを責任者へ送る経路を持つ |
上の3行が、お客様に出る文の信頼を決めます。 どれも「材料に無いことを書く」失敗で、指示の禁止と、数をプログラムで出すことの両方で防ぎます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 監視のアラートの名前とラベル(サーバー名、サービス名、地域)、依存先の障害の告知、障害の最中の確定事項です。お客様の個人の情報は扱いません。
- アラートにお客様の情報を載せない … アラートの注釈に、エラーになった注文番号やお客様のメールアドレスを入れている監視の設定があります。AIに渡す前に、注釈の本文を落とすか、決まった項目だけを渡します
- お客様向けの文を自動で出さない … 掲載は人が行います。障害の最中の誤った告知は、訂正の告知を呼び、信頼を二度失います
- 依存先の名前の扱いを決めておく … 依存先との契約で、障害の告知に名前を出してよいかが決まっていることがあります。下書きでは「外部のサービス」とし、出すかは責任者が決めます
- 受け口を守る … 受け口の URL が漏れると、偽のアラートで下書きが作られます。認証を付け、届いた内容を確かめます
- 確定事項に推測を書かない … 当番が書く確定事項は、そのまま続報の材料になります。「たぶん」「〜と思われる」は書かない決まりにします
誤りが起きた場合のリスクは、お客様に誤った状況を伝えることです。 原因の断定、割合の言い換え、材料に無い進展の3つが典型で、いずれも指示で禁じたうえで、責任者の承認で止めます。
10まず何から始めるか
1週目:機能の対応表を作る
監視のアラートの名前を一覧にし、お客様に見える機能に結びつけます。運用チームとカスタマーサポートで、「お客様にはこう見える」を言葉にそろえます。 依存先の機能と自社の機能の対応も作ります。
2週目:過去の障害3件で試す
先月の障害から3件を選び、人が数えた表を手元の生成AIに渡して続報を作らせます。実際に出した続報と比べ、原因の断定と割合の言い換えが無いかを最優先で見ます。
3週目:受け口と記録を作る
n8n に2つの受け口と Data table を作り、Grafana と依存先のステータスページから受けて記録します。この時点では要約をせず、記録が正しく積まれるかだけを見ます。
4週目:前処理と要約をつなぐ
Code ノードの数え方と、Basic LLM Chain の要約を足し、Slack の当番のチャンネルに下書きを流します。この時点では承認を求めず、当番がこれまでどおり続報を書き、下書きと見比べます。
2か月目: 責任者の承認に回し、下書きを使って続報を出し始めます。責任者が直した箇所を毎週見ます。3か月目以降: 続報の間隔と、1件30分が何分になったかを実測します。当番が障害の最中に続報のために手を止めなくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Grafana の Webhook の通知先が status(firing/resolved)、alerts(labels・startsAt・endsAt・fingerprint など)、truncatedAlerts を送ること。同じラベルのアラートが同じ fingerprint を持つこと。解消していないアラートの endsAt が 0001-01-01T00:00:00Z であること。Max Alerts を超えた分が落とされること。Basic 認証か Authorization ヘッダー、HMAC-SHA256 の署名 | Grafana: Configure webhook notifications | 2026-10-28 |
Statuspage の Webhook が障害の告知の作成・更新と機能の状態の変化で送られること。内容に incident_updates、component_update が入ること。受け口が30秒以内に 2xx を返す必要があり 3xx は失敗と見なされること。送信元の IP が固定されないこと | Atlassian: Enable webhook notifications | 2026-10-28 |
| Webhook ノードの本番の URL が公開したときに有効になること。認証(Basic・ヘッダー・JWT など)、応答のしかた(Immediately など)、IP の許可リスト | n8n: Webhook node | 2026-10-28 |
| Schedule Trigger がワークフローの時間帯、無ければインスタンスの時間帯(自前の既定は America/New_York)を使うこと | n8n: Schedule Trigger node | 2026-10-28 |
| Data table ノードで行の追加・取得(条件で絞る)・更新・upsert・削除ができること | n8n: Data table node | 2026-10-28 |
| Code ノードで JavaScript と Python が使えること。ファイルの読み書きと HTTP の呼び出しができないこと | n8n: Code node | 2026-10-28 |
| Aggregate ノードで複数の項目を1つの一覧にまとめられること | n8n: Aggregate node | 2026-10-28 |
| Basic LLM Chain で Require Specific Output Format を有効にすると出力のパーサーをつなげること | n8n: Basic LLM Chain node | 2026-10-28 |
| Anthropic Chat Model でモデル、出力の長さの上限、温度、Prompt Caching(既定は無効)を設定できること | n8n: Anthropic Chat Model node | 2026-10-28 |
Structured Output Parser の形を JSON の例か JSON Schema で決められ、例から作るとすべての項目が必須になること。$ref が使えないこと | n8n: Structured Output Parser node | 2026-10-28 |
| Slack ノードの Send and Wait for Response が、返事を待ってから先へ進み、Slack の上で承認できること | n8n: Slack node | 2026-10-28 |
依存先の障害と自社の障害の因果は、当番の調査で判断してください。 本記事は各製品の公開情報で確認できた範囲の構成を扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2205)についてのご相談はこちらから。
