はじめに
システム障害の中で最も厄介なもののひとつが、「本来届くべき完了通知がそもそも届かない」というサイレント障害です。
毎日決まった時間に届くはずの完了メールが、何かの理由で届いていない。そして同じような通知メールが大量に来るので、完了通知はそもそも見ない。そして忘れたころにやってくるサイレント障害。
そこで今回は、「指定の時間になっても届かない通知メール」を検知し、Teamsへ自動で通知を飛ばす仕組みを構築しました。
仕組みの全体像
件名が固定のため、「メールが確実に届いているべき時間に照合しに行き、無ければteamsに通知する」という生死監視フローです。
構築のポイントと仕様詳細
監視ルールの事前整理(SharePointリスト管理)
どのシステムから、いつ、どんな件名でメールが届くのかをSharePointリストにマスタとして取りまとめます。
- 登録項目: 確認時間、検索用件名、対象のメールフォルダ、フォルダID
- 例:08:30、【完了通知】IIS起動完了、ISS、12345681269
※Power Automateで対象のメールフォルダを確認することで、フォルダIDをに取得しておきます。PowerShellでも確認可能です。
※対応手順をSharePointリストにまとめておくと調べる手間が省けてより効率的に対応できます。
Power Automateでのメール確認ロジック
フローは一定周期(例:30分ごとなど)で自動起動させますが、異常時不要にTeams通知させないために確認時間を設けます。
- フロー起動時、まずはSharePointリストの「確認時間」と現在時間(hh:mm)を照合します。時間に合致しなければ、そのまま即時終了させます。なおPowerAutomateの実行時間は微妙に1秒早く動いたりするので、時分に影響がない+5秒加算して実行します。
- 時間が合致した場合のみ、Exchange Onlineの指定フォルダ内を検索し、「本日」受信したメールの中に「合致する件名」があるかを確認します。
- メールが存在する ➔ 正常稼働しているため何もしない
- メールが存在しない ➔ サイレント障害の可能性ありと判定し、次の通知処理へ進む
通知先は「Teamsのグループチャット」
アラートの通知先には、あえてチャネル投稿ではなく「Teamsのグループチャット」を採用しました。
Teamsのチャネル投稿だと、「通知に気づかず埋もれる」可能性がありした。確実にPCにポップアップ通知を飛ばすため、グループチャット宛てにメッセージを送信させます。
実装・運用における注意点
実行アカウントの依存問題
Power AutomateのExchange Onlineのコネクタは、「接続を作成したアカウント(実行アカウント)のメールボックス」に依存します。
そのため、そのアカウント宛てに届かない通知メールはもちろん検知できません。またアカウント単位で動くのでアカウント廃止とともに機能がなくなります。
ひとり情シスであれば大きな問題にはなりませんが、もしチームや他部署に展開する場合は「どの実行アカウントで動かすのが望ましいか」を検討しておく必要があります。
まとめ
以上で、『【ひとり情シスソリューション】サイレント障害にいち早く気づく「Power Automate × ExchangeOnline × Teams通知」』でした。
管理対象が多くなると見通しがちなサイレントエラー。頻繁に起こるものではないのでこれで解消されると思ってます。
