【実録 第20話】AIの障害を知らせるメールを作ったら、本物の障害を見逃した話

【実録 第20話】AIの障害を知らせるメールを作ったら、本物の障害を見逃した話

第19話では、サイトをニュースメディアのように作り変えた話をしました。今回は、AIサービスに障害が起きたときに自動でメールを送るしくみを作った話です。

結論から言うと、このしくみは本番で使う前に、自分たちの設計ミスに自分たちで気づけました。しかも一度ではなく、何度も。正直に、その経緯を書きます。

なぜ、障害を知らせるメールを作ろうと思ったか

エラーが起きても、自分のせいか障害か分からない

ChatGPTやClaudeなどのAIサービスは、ちょっとしたエラーがよく起きます。使っている人からすると、それが自分のやり方が悪いのか、サービス側で本当に障害が起きているのか、すぐには判断できません。実際、サイトにもエラーメッセージそのもので検索して来てくれる読者がとても多く、この「わからなくて調べる」という動きが読者を集める大きな理由になっていました。

本当に障害の時だけ知らせればいい、と考えた

それなら、本当に障害が起きているときだけメールで知らせれば、読者は調べる手間なしにすぐわかるはずです。そう考えて、障害アラートメールのしくみを作ることになりました。

送りすぎない形にする

最初に決めたのは、自分から希望した人にだけ届く形にすることです。何も設定していない人には一切届きません。届く頻度も、多くて月に数回程度を目安にする方針にしました。

どんな時に送るかの条件を決める

次に決めたのが、どんな時にメールを送るかの条件です。対象にするAIサービスを絞り込み、障害の重さ、どのくらいの時間続いているか、そして同じ人に立て続けに何通も送らないための上限まで、条件を重ねて決めました。

障害アラートメール、設計を決めよう。まず、頼んでもいない人に勝手に送るのは避けたい。自分からチェックを入れた人にだけ届く形にして
Nav 承知しました。自分から手を挙げた人にだけ届く形にしますね。届く頻度の目安も決めておきますか
そうだね。月に何通も届くと逆にうるさく感じられるから、多くて月数回程度に絞って
Nav 対象サービスと障害の重さ、続いている時間、あと同じ人への送りすぎ防止の上限、この4つで条件を絞る形にします
いいと思う。ただ今すぐじゃなくて、他の準備が整ってからでいい
Nav わかりました。準備が整ったタイミングで着手します

こうして、条件を重ねて絞り込む設計が決まりました。そのあと仕組みができあがり、まずは自分たち宛にだけ届く「お試し運転」から始めることにしました。本物の障害情報を使って、メールが正しく届くかを確かめる期間です。

最初のお試しメールで、言葉のズレに気づいた

1通目が届いた

お試し運転を始めてすぐ、1通目のメールが届きました。あるAIサービスで障害が起きたという内容で、「重大な障害」という言葉が使われていました。

さっきメールが届いた。表示は「重大な障害」になってる。これはうまくいってそうだね
Nav 確認します。公式の発表と照らし合わせてみますね
Nav 確認しました。公式の発表では「一部の機能に障害」となっていて、全体が止まる規模ではありませんでした
え、それって表示のほうが間違ってるってこと?直す前に、まず何でそうなったのか原因を調べたほうがいいんじゃない?
Nav おっしゃる通りです。まず仕組みを確認します
Nav 原因がわかりました。障害の重さにかかわらず、同じ「重大な障害」という文言を出す作りになっていました
それは直して

障害の重さを問わず同じ言葉を出していた箇所を、その場で直しました。

直したはずが、また同じズレが起きた

2通目も、また表示とズレていた

修正した直後に届いた2通目のメールも、「重大な障害」という表示でした。

また「重大な障害」ってメールが届いた。今度はどう?
Nav 公式に出ている情報を見た限り、大きめの表記になっているので、正しく検知できていそうです
うちのサイトに載せている障害の記録を見ると、これは一部の障害だよ。続いた時間も40分くらい
Nav 訂正ありがとうございます。もう一度仕組みを確認します
Nav 原因がわかりました。今回は、通常のチェックを通らなかった時に使う予備の経路がありまして、そちらには障害の重さを判定する処理そのものが入っていませんでした。今朝直したのは片方の経路だけで、もう片方を見落としていました
そういえば、同じ日にもっと大きい本物の障害があったはずだけど、あれはなぜ届かなかったの?
Nav 確認します。理由は2つありました。ひとつは、その障害が続いた時間が短く、時間の条件を満たしていなかったこと。もうひとつは、さっきの誤った送信のせいで、同じサービスは24時間に1通までという上限をすでに使い切っていたことです
じゃあ両方直して

見落としていた予備の経路にも、同じ判定を入れて直しました。

テストの誤送信が、本物の障害の検知を止めていた

本番に切り替える前に、もう一度確認することになった

時間が経ち、本番に切り替える前の最終確認として、オーナーから送信の記録を確認してほしいと頼まれました。

送信の記録を調べてみたら

本番の送信記録を確認したところ、思わぬことがわかりました。同じ人に送りすぎないための上限が、お試し運転中の記録にもそのままかかっていたのです。最初のお試し期間に起きた2件の誤送信が、この上限の枠を使ってしまっていました。

そのせいで、本物の障害を見逃していた

上限が埋まっていたことで、その後に起きた本物の大きな障害を、お試し運転で検知できていませんでした。本来は「本物の障害が何度か起きるのを確認してから本番に切り替える」計画だったのに、その確認自体が止まっていたことになります。

本番に切り替える前に、一度ちゃんと確認しておきたい。送信の記録を見てもらえる?
Nav 一度、本番の送信記録を確認してみます
Nav 確認しました。実は、同じ人への送りすぎを防ぐ上限が、お試し運転中の誤送信にもかかっていました。その結果、その後に起きた本物の大きな障害を検知できていませんでした
ということは、「本物の障害を待って確認する」っていう計画自体が止まっていたってこと?
Nav その通りです。このまま待ち続けても、いつ確認が終わるかわかりません
じゃあ待つのはやめよう。わざと障害が起きた状況を作って、そこで確かめられない?
Nav できます。本番とは別の場所を用意して、いろいろなパターンを試してみます
お願い

こうして、本物の障害を待つ方式から、自分たちで状況を作って確かめる方式に切り替えることになりました。

本物に近いテストで確かめてから、本番に切り替えた

複数パターンを試した

本番とは別に用意した場所で、軽い障害、短時間で終わる障害、境界に近い時間の障害、同じ日に何度も起きるケース、複数のサービスで同時に起きるケースなど、いくつものパターンを試しました。全て、想定した通りの結果になりました。

本番で確認して切り替えた

最後に、自分たち宛のメールが実際に届くところを目で確認してから、本番への切り替えを行いました。

まとめ

  • 一度メールが届いたからといって、すぐに「成功した」と判断しないこと
  • 表示されている言葉と、実際に起きたことが一致しているかを照らし合わせて確認すること
  • ひとつの原因を直しても、別の経路に同じ抜けが残っていないか確認すること
  • 制限をかけるしくみ自体が、確認作業の邪魔をすることがあると知ったこと
  • 本物が起きるのを待つより、自分たちで状況を作って試したほうが早く確実だったこと

次回は、夜のあいだにAIがサイトを見回るようになった話です。

メルマガ登録CTA B2(MCPカオスマップ無料プレゼント)