📌

ログ検索アラート ルールのためのカスタム ログ挿入方法

2024/11/12に公開

概要

ログ検索アラート ルールの動作を確認したり、テストする時どうしていますか?アプリを作ってログを出力して確認している方もいるかもしれません。しかし、その方法だとあまり効率的ではありません。

そこでこの記事では、Logic Apps を使って任意のログを任意のタイミングで出力する方法を紹介します。これにより、ログ検索アラート ルールの動作を確認する際に、より効率的にテストができるようになります。

登場人物

  • Logic Apps
  • Log Analytics ワークスペース
  • データ収集ルール
  • データ収集エンドポイント
  • アラート ルール

0. Log Analytics ワークスペース作成

ログの保存先となる Log Analytics ワークスペースを作成しておきます(既存のワークスペースを使っても構いません)。
alt text

1. Logic Apps

リソース作成

Azure ポータルから Logic Apps を作成します。特に必要な設定は無いですが、今回はホスティング プランを「従量課金」にしました。

alt text

alt text

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 が無効になっている旨のメッセージが表示されます。

alt text

「ID」ブレードに移動し、システム割り当てマネージド ID を有効にします。

alt text

このマネージド ID に「監視メトリック発行者」ロールを割り当てます。これによって Logic Apps が Log Analytics ワークスペースにデータを送信できるようになります。

alt text

2. データ収集エンドポイント作成

データ収集エンドポイントを作成します。このエンドポイントは、この後、作成するカスタム ログ テーブルにデータを送信するために使用します。

alt text

3. データ収集ルール作成

データ収集ルールを作成します。このルールは、データ収集エンドポイントからデータを受信し、指定したテーブルにデータを格納します。

Log Analytics ワークスペース リソースの「テーブル」ブレードに移動し、「新しいカスタム ログ(DCR ベース)」を選択して、カスタム ログ テーブルとそれに紐づくデータ収集ルールを作成していきます。

alt text

次の画面で、カスタム ログのサンプル スキーマとして以下の JSON ファイルをアップロードします。

[{ "RawData": "aaa" }]

アップロードしたスキーマが正しく読み込まれると、以下のようにスキーマが表示されます。

alt text

確認して良ければ「作成」をクリックしてカスタム ログ テーブルを作成します。

4. アプリ設定

作成したデータ収集エンドポイントとデータ収集ルールの情報を Logic Apps のワークフロー定義に追加します。

データ収集エンドポイント

Azure ポータルからデータ収集エンドポイントのログ インジェスト エンドポイントを取得します。

alt text

データ収集ルール

Azure ポータルからデータ収集ルールの JSON ビューを選択し、immutableIddataFlows.streams の値を取得します。

alt text

Logic Apps

「ロジック アプリ デザイナー」にて、「HTTP 2」アクションの URI を以下の値に更新し保存します。

<ログ インジェスト エンドポイント>/dataCollectionRules/<immutableID>/streams/<dataFlows.streams>?api-version=2023-01-01

alt text

5. ログ出力

そのまま「ロジック アプリ デザイナー」ブレード内で「実行」を選択し、Logic Apps のワークフローをテスト実行します。

alt text

「実行履歴」ブレードに移動し、実行が成功したことを確認します。

alt text

Log Analytics ワークスペースにデータが格納されていることを確認します。

alt text

(Optional) 6. ログ検索アラート ルールのテスト

作成したカスタム ログ テーブルを使って、ログ検索アラート ルールを作成し、テストします。

スコープには、作成したカスタム ログ テーブルがある Log Analytics ワークスペースを指定します。

alt text

条件には、カスタム ログ テーブルに格納されたデータを検出する条件を指定します。

以下画像内のルールを簡潔にまとめると、RawData フィールドに Test という文字列が含まれるログが直近 1 時間以内に 1 つ以上あるかどうかを 5 分ごとにチェックするルールです。

alt text

アクションには、アラートが発生した際に通知を送信する設定を行います。今回はメール通知を設定しました。

以下のようにアクション グループを作成し、アクション グループにメール通知を設定します。

alt text

通知方法としてメールを選択し、通知先のメールアドレスを入力します。

alt text

アクションはスキップして、アクション グループを作成します。

アクション グループを作成すると、アラート ルールの作成画面に戻り、自動的に作成したアクション グループが選択されていることを確認します。

alt text

「詳細」タブでアラート ルールの名前を入力し、アラート ルールを作成します。

少し時間を置いて、アラート ルールが発報することを確認します。

alt text

アクションとして設定したメールアドレスに通知が届いていることを確認します。

alt text

まとめ

この記事では、Logic Apps を使って任意のログを任意のタイミングで出力する方法を紹介しました。これにより、ログ検索アラート ルールの動作を確認する際に、より効率的にテストができるようになります。

参考資料

GitHubで編集を提案
Microsoft (有志)

Discussion