チュートリアル: Resource Manager テンプレートを使ってワークスペース データ収集ルールの変換を Azure Monitor に追加する

このチュートリアルでは、Resource Manager テンプレートを使ってワークスペース データ収集ルール内でサンプル変換を構成する手順について説明します。 Azure Monitor の変換を使うと、宛先への送信前に、受信データをフィルター処理または変更することができます。 ワークスペース変換は、まだ Azure Monitor データ インジェスト パイプラインを使っていないワークフローに対するインジェスト時間の変換をサポートしています。

ワークスペース変換は、そのワークスペース用の 1 つのデータ収集ルール (DCR) (ワークスペース DCR と呼ばれます) にまとめて格納されます。 各変換は、特定のテーブルに関連付けられます。 変換は、DCR を使わないすべてのワークフローからこのテーブルに送信されるすべてのデータに適用されます。

注意

このチュートリアルでは、Resource Manager テンプレートと REST API を使ってワークスペース変換を構成します。 Azure portal を使った同じチュートリアルについては、Azure portal を使って Azure Monitor にワークスペース データ収集ルールの変換を追加するチュートリアルに関するページを参照してください。

このチュートリアルで学習する内容は次のとおりです。

  • Log Analytics ワークスペースのテーブルに対してワークスペース変換を構成する。
  • インジェスト時間変換のログ クエリを作成する。

注意

このチュートリアルでは、Azure Cloud Shell の PowerShell を使用し、Azure Monitor の Tables API と Azure portal を使用して REST API 呼び出しを行い、Resource Manager テンプレートをインストールします。 これらの呼び出しは、他の方法を使用して行うことができます。

前提条件

このチュートリアルでは、以下のものが必要です。

チュートリアルの概要

このチュートリアルでは、特定のレコードをフィルターすることで、LAQueryLogs テーブルのストレージ要件を削減します。 また、列データを解析してカスタム列にデータを格納するときに、列の内容を削除します。 Laquerylogs テーブルは、ワークスペースでログ クエリの監査を有効にしたときに作成されますが、これはチュートリアルのサンプルとしてのみ使用されます。 これと同じ基本的なプロセスを使用して、Log Analytics ワークスペースでサポートされているテーブルの変換を作成できます。

クエリ監査ログを有効にする

作業する LAQueryLogs テーブルを作成するには、ワークスペースでクエリ監査を有効にする必要があります。 これは、すべてのインジェスト時間変換には必要ありません。 このサンプル変換で使用されるサンプル データを生成するだけです。

  1. Azure portal の [Log Analytics ワークスペース] メニューから [診断設定] を選択し、[診断設定を追加する] をクリックします。

    診断設定のスクリーンショット。

  2. 診断設定の名前を指定し、監査データが同じワークスペースに保存されるようにワークスペースを選択します。 [監査] カテゴリを選択し、[保存] をクリックして診断設定を保存し、診断設定ページを閉じます。

    新しい診断設定のスクリーンショット。

  3. [ログ] を選択し、クエリを実行して LAQueryLogs にデータを入力します。 これらのクエリでは実際にデータを返す必要はありません。

    サンプル ログ クエリのスクリーンショット。

テーブル スキーマの更新

変換を作成する前に、テーブルに対して次の 2 つの変更を行う必要があります。

  • テーブルのワークスペース変換を有効にする必要があります。 これは、変換によってテーブルのスキーマが変更されない場合でも、変換を行うすべてのテーブルに必要です。
  • 変換によって入力された追加の列は、テーブルに追加する必要があります。

以下の PowerShell コードを使用してテーブルを構成するには、Tables - Update API を使用します。 API を呼び出すと、カスタム列が定義されているかどうかにかかわらず、テーブルのワークスペース変換が有効になります。 このサンプルには、変換クエリを使用して設定される Resources_CF という名前のカスタム列が含まれています。

重要

組み込みテーブルに追加されたカスタム列の末尾は、_CF にする必要があります。 カスタム テーブル (名前の末尾が _CL であるテーブル) に追加された列には、このサフィックスは必要ではありません。

  1. Azure portal で [Cloud Shell] ボタンをクリックして、環境が PowerShellに設定されていることを確認します。

    Cloud Shell を開いているスクリーンショット。

  2. 次の PowerShell コードをコピーし、Path パラメーターをワークスペースの詳細に置換します。

    $tableParams = @'
    {
        "properties": {
            "schema": {
                "name": "LAQueryLogs",
                "columns": [
                    {
                        "name": "Resources_CF",
                        "description": "The list of resources, this query ran against",
                        "type": "string",
                        "isDefaultDisplay": true,
                        "isHidden": false
                    }
                ]
            }
        }
    }
    '@
    
    Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/LAQueryLogs?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
    
  3. そのコードを Cloud Shell のプロンプトに貼り付けて、実行します。

    Cloud Shell のスクリプトのスクリーンショット。

  4. Azure portal の [Log Analytics ワークスペース] メニューに移動すると、列が追加されたことを確認できます。 [ログ] を選択して Log Analytics を開き、LAQueryLogs テーブルを展開してその列を表示します。

    新しい列がある Log Analytics のスクリーンショット。

変換クエリを定義する

Log Analytics を使用して、変換クエリをデータ収集ルールに追加する前にテストします。

  1. Azure portal の [Log Analytics ワークスペース] メニューでワークスペースを開き、[ログ] を選択して Log Analytics を開きます。

  2. 次のクエリを実行して、LAQueryLogs テーブルのコンテンツを表示します。 RequestContext 列のコンテンツを確認します。 変換によって、この列からワークスペース名が取得され、残りのデータが削除されます。

    LAQueryLogs
    | take 10
    

    Log Analytics の最初のクエリのスクリーンショット。

  3. 次のようにクエリを変更します。

    LAQueryLogs
    | where QueryText !contains 'LAQueryLogs'
    | extend Context = parse_json(RequestContext)
    | extend Workspace_CF = tostring(Context['workspaces'][0])
    | project-away RequestContext, Context
    

    これにより、次の変更が行われます。

    • これらのログ エントリは役に立たないため、スペースを節約するために LAQueryLogs テーブル自体のクエリに関連する行を削除します。
    • クエリされたワークスペースの名前の列を追加します。
    • RequestContext 列からデータを削除して領域を節約します。

    Log Analytics の変更したクエリのスクリーンショット。

  4. 変換で使用するために、クエリに次の変更を加えます。

    • このクエリのデータのソースとしてテーブル名 (この場合は LAQueryLogs) を指定するのではなく、source キーワードを使用します。 これは、変換クエリで受信データを常に表す仮想テーブルです。
    • 変換クエリでサポートされていないすべての演算子を削除します。 サポートされている演算子の詳細な一覧については、「サポートされている KQL 機能」を参照してください。
    • クエリを単一の行にフラット化して、DCR JSON に収まるようにします。

    これらの変更後に変換で使用するクエリを次に示します。

    source | where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Resources_CF = tostring(Context['workspaces']) |extend RequestContext = ''
    

データ収集ルール (DCR) を作成する

これはワークスペースの最初の変換であるため、ワークスペース変換の DCR を作成する必要があります。 同じワークスペース内に他のテーブル用のワークスペース変換を作成すると、それらは常にこの同じ DCR に格納されます。

  1. Azure portal の検索ボックスに、テンプレート と入力して、[カスタム テンプレートのデプロイ] を選択します。

    カスタム テンプレートをデプロイするためのスクリーンショット。

  2. [エディターで独自のテンプレートをビルド] をクリックします。

    エディタでテンプレートをビルドするためのスクリーンショット。

  3. 下の Resource Manager テンプレートをエディターに貼り付けて、[保存] をクリックします。 このテンプレートでは、DCR が定義され、変換クエリが含まれます。 パラメーターの値を収集するので、このテンプレートを変更する必要はありません。

    Resource Manager テンプレートを編集するためのスクリーンショット。

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "dataCollectionRuleName": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the name of the Data Collection Rule to create."
                }
            },
            "location": {
                "type": "string",
                "defaultValue": "westus2",
                "allowedValues": [
                    "westus2",
                    "eastus2",
                    "eastus2euap"
                ],
                "metadata": {
                    "description": "Specifies the location in which to create the Data Collection Rule."
                }
            },
            "workspaceResourceId": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the Azure resource ID of the Log Analytics workspace to use."
                }
            }
        },
        "resources": [
            {
                "type": "Microsoft.Insights/dataCollectionRules",
                "name": "[parameters('dataCollectionRuleName')]",
                "location": "[parameters('location')]",
                "apiVersion": "2021-09-01-preview",
                "kind": "WorkspaceTransforms",
                "properties": {
                    "destinations": {
                        "logAnalytics": [
                            {
                                "workspaceResourceId": "[parameters('workspaceResourceId')]",
                                "name": "clv2ws1"
                            }
                        ]
                    },
                    "dataFlows": [
                        {
                            "streams": [
                                "Microsoft-Table-LAQueryLogs"
                            ],
                            "destinations": [
                                "clv2ws1"
                            ],
                            "transformKql": "source |where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Resources_CF = tostring(Context['workspaces']) |extend RequestContext = ''"
                        }
                    ]
                }
            }
        ],
        "outputs": {
            "dataCollectionRuleId": {
                "type": "string",
                "value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]"
            }
        }
    }
    
  4. [カスタム デプロイ] 画面で、データ収集ルールを格納する [サブスクリプション][リソース グループ] を指定し、テンプレートに定義されている値を指定します。 これには、データ収集ルールの [名前] と、前の手順で収集した [ワークスペース リソース ID] が含まれます。 [場所] は、ワークスペースと同じ場所にする必要があります。 [リージョン] は既に設定されていて、データ収集ルールの場所に使用されます。

    カスタムデプロイ値を編集するためのスクリーンショット。

  5. [確認と作成] をクリックし、詳細を確認したら [作成] をクリックします。

  6. デプロイが完了したら、[デプロイの詳細] ボックスを展開し、データ収集ルールをクリックして詳細を表示します。 [JSON 表示] をクリックします。

    データ収集ルールの詳細を示すスクリーンショット。

  7. データ収集ルールの [リソース ID] をコピーします。 これは次の手順で使用します。

    データ収集ルールの JSON ビューのスクリーンショット。

変換を有効にする最後の手順は、DCR をワークスペースにリンクすることです。

重要

ワークスペースは 1 つの DCR にしか接続できません。リンクされた DCR には、このワークスペースが変換先として含まれている必要があります。

以下の PowerShell コードを使用してテーブルを構成するには、Workspaces - Update API を使用します。

  1. [Cloud Shell] ボタンをクリックして Cloud Shell を再度開きます。 次の PowerShell コードをコピーし、パラメーターをワークスペースおよび DCR の値に置換します。

    $defaultDcrParams = @'
    {
        "properties": {
            "defaultDataCollectionRuleResourceId": "/subscriptions/{subscription}/resourceGroups/{resourcegroup}/providers/Microsoft.Insights/dataCollectionRules/{DCR}"
        }
    }
    '@
    
    Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}?api-version=2021-12-01-preview" -Method PATCH -payload $defaultDcrParams
    
  2. そのコードを Cloud Shell のプロンプトに貼り付けて、実行します。

    ワークスペースを DCR にリンクするスクリプトのスクリーンショット。

テスト変換

変換が有効になるまで約 30 分待ってから、テーブルに対してクエリを実行してテストできます。 変換が適用された後にテーブルに送信されたデータのみが影響を受けます。

このチュートリアルでは、いくつかのサンプル クエリを実行して、LAQueryLogs テーブルにデータを送信します。 変換によってこれらのレコードがフィルター処理されることを確認できるように、LAQueryLogs に対するクエリをいくつか含めます。 出力には新しい Workspace_CF 列があり、LAQueryLogs のレコードはないことに注意してください。

トラブルシューティング

このセクションでは、受け取る可能性があるさまざまなエラー状態とその修正方法について説明します。

Log Analytics の IntelliSense でテーブルの新しい列が認識されない

IntelliSense を駆動するキャッシュは、更新に最大 24 時間かかる場合があります。

動的列の変換が機能していません

現在、動的列に影響を与える既知の問題があります。 一時的な回避策は、動的列データに対して操作を実行する前に、parse_json() を使用して動的列データを明示的に解析することです。

次のステップ