Azure の監視をしていますか?
Azure Monitor ではデータ収集、データの格納、データの利用の機能を提供しています
今回はデータの利用方法の1つである、「アラート」に生成 AI を組み合わせてみます
アラートで行うこと
アラートと聞くと何をイメージしますか?
メール通知を想像した方は多いのではないでしょうか?
しかし、本当にすべて通知する必要がありますか?
flowchart TD
A[アラートのトリガー] --> B{自動修正できるか?}
B -- はい --> C[自動修正]
B -- いいえ --> D[ユーザーに通知]
こんなことができれば、もっと嬉しいですよね?
通知されたユーザーは対応マニュアルや製品の公式情報を見て対応を行うのであれば、その情報も通知にあると嬉しいですよね?
図にするとこんなイメージでしょうか
flowchart TD
A[アラートのトリガー] --> B{自動修正できるか?}
B -- はい --> C[自動修正]
B -- いいえ --> D["対応マニュアル/公式情報を
RAG を使って収集"]
D --> E[ユーザーに通知]
これが実現できるかどうかを試してみたいと思います
ざっくり手順
- 監視対象の作成
- 自動修正を構築
- 自動修正の場合の監視設定
- 検証①
- RAG を構成
- RAG を使用する場合の監視設定
- 検証②
1. 監視対象の作成
1台の Windows VM を作成します
VM は IIS を有効化しておきます
監視用に VM Insights も有効化しておきます
VM insights の概要 - Azure Monitor | Microsoft Learn
architecture-beta
group vnet(azure:virtual-networks)[Vnet]
group subnet(azure:subnet)[Subnet] in vnet
service vm(azure:virtual-machine)[VM] in subnet
2. 自動修正を構築
自動修正のための仕込みをします
IIS が停止した場合に自動で再起動する仕組みを作ります
Azure VM にはゲスト OS 内にコマンドを実行する方法がいくつかありますが、今回はマネージド実行コマンドを使用します
実際に OS 内で実行する IIS の再起動コマンドはこちらです
|
|
これをマネージド実行コマンドで VM に実行するにはこのようなコマンドになります
初めにマネージド ID での Azure への接続を行い、その後にマネージド実行コマンドを実行します
|
|
アラート発報時にこのコマンドを自動実行する仕組みとしては Azure Automation を使用します
専用の Automation Rubook を用意し、マネージド ID に権限を与えておきます

アラート発生時の流れとしてはこちらです
flowchart TD
A["アラートのトリガー"] --> B{自動修正できるか?}
B -- はい --> C["Azure Automation Runbook
を実行"]
C --> F["マネージド実行コマンドで
IIS をスタート"]
B -- いいえ --> D["対応マニュアル/公式情報を
RAG を使って収集"]
D --> E[ユーザーに通知]
3. 自動修正の場合の監視設定
IIS の稼働を監視するために、インベントリ監視を有効化しておきます
Windows サービスで [W3SVC] を検索すると、IIS の稼働状況を確認できます
これは Log Analytics ワークスペースにデータが蓄えられているのものが可視化されています
下記の KQL を実行すると IIS の稼働状況が収集できていることがわかります
ConfigurationData
| where ConfigDataType == "WindowsServices" and SvcName contains "w3svc"
| project TimeGenerated, Computer, ConfigDataType, SvcName, SvcDisplayName, SvcState

IIS が停止したかどうかは Log Analytics ワークスペース内の別のテーブルを確認する必要があります
IIS の停止を検知する KQL はこちらです
これにより IIS の現在の状態が停止 (SvcState == “Stopped”) になってしまったことを検知することができます
ConfigurationChange
| where ConfigChangeType == "WindowsServices" and SvcName contains "w3svc" and SvcState == "Stopped"
| project TimeGenerated, Computer, ConfigChangeType, SvcName, SvcDisplayName, SvcChangeType, SvcPreviousState, SvcState

この検知の速度を上げておくように変更しておきます
[変更とインベントリ センターを開く] > [設定] > [Windows サービス] で収集頻度を 10分にしておきます
この内容でログアラートを設定し、アクション グループには Automation Account を指定します
4. 検証①
IIS が停止したときに自動で復旧するかをテストしてみます
実行コマンドで IIS を停止させます
|
|

IIS を停止させたので、web ページは表示されていません
しばらくしてインベントリ管理からも IIS が停止したことが確認できます
アラートがトリガーされ、Automation が無事に実行されました
Web ページにアクセスしてみると、無事に表示されるようになりました
5. RAG を構成
続いて、自動対応できない場合のアラートを RAG で情報収集し、ユーザーへ通知を行ってみます
今回使用する RAG は Logic Apps を使って用意してみます
こちらのサンプルを使って用意しました
https://github.com/Azure/logicapps/tree/master/ai-sample
README にしたがって進めれば問題ないですが、下記の点に注意です
- Logic Apps 作成時の parameters.json の設定で
aisearch_index_name
に値を入れるのを忘れないようにしてください。
README の通りに作っていると、[chat-index] という値を入れることになると思います
サンプルを実行すると2種類の Logic Apps ワークフローが作成されます
- ingest-data : データ取り込み用
- chat-workflow : ingest された内容にチャットで検索する用

今回は RAG で検索する PDF としては Azure の公開情報にあるトラシューページの一部を PDF にしたものを利用します
Microsoft Azure のトラブルシューティング に関するドキュメント | Microsoft Learn
Storage Account の Blob などに PDF にしたものを置いて ingest-data ワークフローを実行します
PDF の内容が検索できるか確認するために chat-workflow を実行します
無事に期待通りの結果が返ってきました
6. RAG を使用するアクションの設定
作成した Logic Apps をアラートのアクショングループで利用できるように修正していきます
Azure Monitor アラートをカスタマイズする方法はこちらを参考にします
Logic Apps を使用してアラート通知をカスタマイズする - Azure Monitor | Microsoft Learn
chat-workflow を編集していきます
-
トリガーを削除し、[When a HTTP request is received] を選びなおします
-
Request Body JSON Schema に公開情報に記載のあるアラートスキーマを貼り付けます
chat-workflow: -
トリガーの直後に公開情報にの記載のある [変数の初期化] を入力します
※リソースの読み取りは今回は使わないので割愛
chat-workflow:
続いて Azure Open AI に関する部分を今回用にカスタマイズしていきます
-
[generate search query] の3行目を
var original_user_query = workflowContext.trigger.outputs.body.data.essentials.description
に書き換えます
chat-workflow: -
Get chat completions の ユーザーメッセージをアラートの詳細を参照するように変更します
chat-workflow:
最後に通知設定を行います。今回は Teams に通知するように設定します
7. RAG を使用する場合の監視設定
簡単にするために、VM の死活監視をしてみます
死活監視はいろいろな方法があります
Azure VM における死活監視の考え方 | Japan Azure Monitoring Support Blog
今回は Heartbeat の死活監視を行います
設定方法はこちらにならいます
死活監視のクエリについて | Japan Azure Monitoring Support Blog
アクションでは作成した Logic Apps を使用します
7. 検証②
監視対象 VM を停止してしばらく放置します
Heatbeat が途絶えたアラートが発報されました
Logic Apps の実行履歴を見るとちゃんと実行されています
通知先の Teams を確認してみると、無事に通知されていました
まとめ
Azure Monitor のアラートを自動化して生成 AI を使ってみました
自動化:対応があらかじめ決まっているアラートであれば、自動化することで人手を削減できそうです
生成 AI:対応が決まっていないアラートであれば、生成 AI を使って情報収集を行うことで対応をスムーズにできそうです
アプリケーション部分で注目が集まりがちですが、監視の文脈でも生成 AI は使えそうです!
参考
- Automation Hybrid Runbook Worker V2 を試し隊 – クラウドを勉強し隊
- https://github.com/Azure/logicapps/tree/master/ai-sample
- Microsoft Azure のトラブルシューティング に関するドキュメント | Microsoft Learn
- Logic Apps を使用してアラート通知をカスタマイズする - Azure Monitor | Microsoft Learn
- Microsoft.Compute/virtualMachines - Bicep, ARM template & Terraform AzAPI reference | Microsoft Learn