ログ検索アラート ルールのためのカスタム ログ挿入方法
概要
ログ検索アラート ルールの動作を確認したり、テストする時どうしていますか?アプリを作ってログを出力して確認している方もいるかもしれません。しかし、その方法だとあまり効率的ではありません。
そこでこの記事では、Logic Apps を使って任意のログを任意のタイミングで出力する方法を紹介します。これにより、ログ検索アラート ルールの動作を確認する際に、より効率的にテストができるようになります。
登場人物
- Logic Apps
- Log Analytics ワークスペース
- データ収集ルール
- データ収集エンドポイント
- アラート ルール
0. Log Analytics ワークスペース作成
ログの保存先となる Log Analytics ワークスペースを作成しておきます(既存のワークスペースを使っても構いません)。
1. Logic Apps
リソース作成
Azure ポータルから Logic Apps を作成します。特に必要な設定は無いですが、今回はホスティング プランを「従量課金」にしました。
Logic Apps 設定
ワークフロー定義
作成した Logic Apps リソースの「ロジック アプリ コード レビュー」ブレードに移動し、以下の JSON を貼り付けます。
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"HTTP_2": {
"inputs": {
"authentication": {
"audience": "https://monitor.azure.com",
"type": "ManagedServiceIdentity"
},
"body": [
{
"RawData": "Test"
}
],
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"uri": "<ENDPOINT_URI>"
},
"runAfter": {},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
},
"type": "Http"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {
"$connections": {
"defaultValue": {},
"type": "Object"
}
},
"staticResults": {
"HTTP0": {
"code": "200",
"outputs": {
"statusCode": "OK"
},
"status": "Succeeded"
}
},
"triggers": {
"Recurrence": {
"evaluatedRecurrence": {
"frequency": "Hour",
"interval": 1
},
"recurrence": {
"frequency": "Hour",
"interval": 1
},
"type": "Recurrence"
}
}
},
"parameters": {
"$connections": {
"value": {}
}
}
}
マネージド ID の有効化
JSON でワークフロー定義を作成した後に「ロジック アプリ デザイナー」ブレードに移動し、「HTTP 2」アクションを選択すると、マネージド ID が無効になっている旨のメッセージが表示されます。
「ID」ブレードに移動し、システム割り当てマネージド ID を有効にします。
このマネージド ID に「監視メトリック発行者」ロールを割り当てます。これによって Logic Apps が Log Analytics ワークスペースにデータを送信できるようになります。
2. データ収集エンドポイント作成
データ収集エンドポイントを作成します。このエンドポイントは、この後、作成するカスタム ログ テーブルにデータを送信するために使用します。
3. データ収集ルール作成
データ収集ルールを作成します。このルールは、データ収集エンドポイントからデータを受信し、指定したテーブルにデータを格納します。
Log Analytics ワークスペース リソースの「テーブル」ブレードに移動し、「新しいカスタム ログ(DCR ベース)」を選択して、カスタム ログ テーブルとそれに紐づくデータ収集ルールを作成していきます。
次の画面で、カスタム ログのサンプル スキーマとして以下の JSON ファイルをアップロードします。
[{ "RawData": "aaa" }]
アップロードしたスキーマが正しく読み込まれると、以下のようにスキーマが表示されます。
確認して良ければ「作成」をクリックしてカスタム ログ テーブルを作成します。
4. アプリ設定
作成したデータ収集エンドポイントとデータ収集ルールの情報を Logic Apps のワークフロー定義に追加します。
データ収集エンドポイント
Azure ポータルからデータ収集エンドポイントのログ インジェスト エンドポイントを取得します。
データ収集ルール
Azure ポータルからデータ収集ルールの JSON ビューを選択し、immutableId
と dataFlows.streams
の値を取得します。
Logic Apps
「ロジック アプリ デザイナー」にて、「HTTP 2」アクションの URI を以下の値に更新し保存します。
<ログ インジェスト エンドポイント>/dataCollectionRules/<immutableID>/streams/<dataFlows.streams>?api-version=2023-01-01
5. ログ出力
そのまま「ロジック アプリ デザイナー」ブレード内で「実行」を選択し、Logic Apps のワークフローをテスト実行します。
「実行履歴」ブレードに移動し、実行が成功したことを確認します。
Log Analytics ワークスペースにデータが格納されていることを確認します。
(Optional) 6. ログ検索アラート ルールのテスト
作成したカスタム ログ テーブルを使って、ログ検索アラート ルールを作成し、テストします。
スコープには、作成したカスタム ログ テーブルがある Log Analytics ワークスペースを指定します。
条件には、カスタム ログ テーブルに格納されたデータを検出する条件を指定します。
以下画像内のルールを簡潔にまとめると、
RawData
フィールドにTest
という文字列が含まれるログが直近 1 時間以内に 1 つ以上あるかどうかを 5 分ごとにチェックするルールです。
アクションには、アラートが発生した際に通知を送信する設定を行います。今回はメール通知を設定しました。
以下のようにアクション グループを作成し、アクション グループにメール通知を設定します。
通知方法としてメールを選択し、通知先のメールアドレスを入力します。
アクションはスキップして、アクション グループを作成します。
アクション グループを作成すると、アラート ルールの作成画面に戻り、自動的に作成したアクション グループが選択されていることを確認します。
「詳細」タブでアラート ルールの名前を入力し、アラート ルールを作成します。
少し時間を置いて、アラート ルールが発報することを確認します。
アクションとして設定したメールアドレスに通知が届いていることを確認します。
まとめ
この記事では、Logic Apps を使って任意のログを任意のタイミングで出力する方法を紹介しました。これにより、ログ検索アラート ルールの動作を確認する際に、より効率的にテストができるようになります。
Discussion