チュートリアル: データ収集ルール (DCR) を編集する

このチュートリアルでは、コマンド ライン ツールを使用して既にプロビジョニングされているデータ収集ルール (DCR) の定義を編集する方法について説明します。

このチュートリアルでは、以下の内容を学習します。

  • 既存のポータル機能を活用して DCR を事前に作成する
  • ARM API 呼び出しを使用してデータ収集ルールの内容を取得する
  • ARM API 呼び出しを使用してデータ収集ルールに変更を適用する
  • PowerShell スクリプトを使用して DCR 更新のプロセスを自動化する

Note

このチュートリアルでは、既存の DCR を編集するための 1 つの方法について説明します。 その他の方法については、「Azure Monitor でデータ収集規則 (DCR) を作成および編集する」を参照してください。

前提条件

このチュートリアルを完了するには、以下が必要です。

チュートリアルの概要

Log Analytics へのカスタム データの取り込みを設定する最も簡単な方法は、ポータルでウィザードを実行することですが、場合によっては、後でデータ収集ルールを更新して、以下のことを行う必要があります。

  • データ収集設定を変更する (DCR に関連付けられているデータ収集エンドポイントなど)
  • データ ストリームのデータ解析やフィルター処理ロジックを更新する
  • データの変換先を変更する (たとえば、Azure テーブルにデータを送信する。このオプションは DCR ベースのカスタム ログ ウィザードでは直接提供されません)

このチュートリアルでは、最初にカスタム ログのインジェストを設定します。 次に、カスタム ログの KQL 変換を変更して追加のフィルター処理を含め、DCR に変更を適用します。 最後に、すべての編集操作を 1 つの PowerShell スクリプトに結合します。これは、上記のいずれかの理由で任意の DCR を編集するために使用できます。

新しいカスタム ログを設定する

まず、新しいカスタム ログを設定します。 「チュートリアル: Azure portal を使用して Azure Monitor ログにカスタム ログを送信する (プレビュー)」の手順に従います。 作成された DCR のリソース ID をメモしてください。

DCR コンテンツを取得する

DCR を更新するために、そのコンテンツを取得し、それをファイルとして保存して、さらに編集できるようにします。

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

    Screenshot of opening cloud shell

  2. 次のコマンドを実行して DCR コンテンツを取得し、ファイルに保存します。 <ResourceId> を DCR ResourceID に置き換え、<FilePath> を DCR の格納先ファイルの名前に置き換えます。

    $ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
    $FilePath = "<FilePath>" # Store DCR content in this file
    $DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method GET
    $DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File -FilePath $FilePath
    

DCR を編集する

これで、DCR コンテンツが JSON ファイルとして格納されるときに、任意のエディターを使用して DCR に変更を加えられるようになりました。 Cloud Shell 環境からファイルをダウンロードすることもできます (環境を使用している場合)。

また、環境に付属のコード エディターを使用することもできます。 たとえば、クラウド ドライブ上の temp.dcr というファイルに DCR を保存した場合は、次のコマンドを使用して、Cloud Shell ウィンドウから DCR を編集用に開くことができます。

code "temp.dcr"

DCR 内の KQL 変換を変更して、RequestType が "GET" 以外である行を削除してみましょう。

  1. 前のパートで作成したファイルを開き、任意のエディターを使用して編集します。
  2. ”transformKql” 属性を含む行を見つけます。カスタム ログ作成のチュートリアルに従った場合、これは次のようになります。
    "transformKql": "  source\n    | extend TimeGenerated = todatetime(Time)\n    | parse RawData with \n    ClientIP:string\n    ' ' *\n    ' ' *\n    ' [' * '] \"' RequestType:string\n    \" \" Resource:string\n    \" \" *\n    '\" ' ResponseCode:int\n    \" \" *\n    | where ResponseCode != 200\n    | project-away Time, RawData\n"
    
  3. KQL 変換を変更して、RequestType による追加フィルターを含めます
    "transformKql": "  source\n    | where RawData contains \"GET\"\n     | extend TimeGenerated = todatetime(Time)\n    | parse RawData with \n    ClientIP:string\n    ' ' *\n    ' ' *\n    ' [' * '] \"' RequestType:string\n    \" \" Resource:string\n    \" \" *\n    '\" ' ResponseCode:int\n    \" \" *\n    | where ResponseCode != 200\n    | project-away Time, RawData\n"
    
  4. DCR コンテンツを変更してファイルを保存します。

変更を適用する

最後の手順は、システムで DCR を更新することです。 これは、ARM API への "PUT" HTTP 呼び出しによって実現されます。これにより、更新された DCR コンテンツが HTTP 要求本文で送信されます。

  1. Azure Cloud Shell を使用している場合は、ファイルを保存して埋め込みエディターを閉じるか、変更した DCR ファイルを Cloud Shell 環境にアップロードします
  2. 次のコマンドを実行して、ファイルから DCR コンテンツを読み込み、HTTP 呼び出しを行ってシステム内の DCR を更新します。 <ResourceId> を DCR ResourceID に置き換え、<FilePath> をチュートリアルの前の部分で変更したファイルの名前に置き換えます。 同じ PowerShell セッション内で DCR に対する読み取りと書き込みを行う場合は、最初の 2 行を省略できます。
    $ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
    $FilePath = "<FilePath>" # Store DCR content in this file
    $DCRContent = Get-Content $FilePath -Raw 
    Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method PUT -Payload $DCRContent 
    
  3. 呼び出しが成功すると、状態コード "200" の応答が返されます。これは、DCR が更新されたことを示します。
  4. これで、DCR に移動し、"JSON ビュー" 関数を使用してポータルでその内容を確認できます。または、チュートリアルの最初の部分を繰り返して、DCR コンテンツをファイルに取得できます。

すべてをまとめる

DCR の内容を読み取って更新する方法がわかったら、次はすべてをユーティリティ スクリプトにまとめてみましょう。これを使用すれば、両方の操作を一緒に実行できます。

param ([Parameter(Mandatory=$true)] $ResourceId)

# get DCR content and put into a file
$FilePath = "temp.dcr"
$DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method GET
$DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File $FilePath

# Open DCR in code editor
code $FilePath | Wait-Process

#Wait for confirmation to apply changes
$Output = Read-Host "Apply changes to DCR (Y/N)? "
if ("Y" -eq $Output.toupper())
{ 
	#write DCR content back from the file
	$DCRContent = Get-Content $FilePath -Raw
	Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method PUT -Payload $DCRContent		
}

#Delete temporary file
Remove-Item $FilePath

このユーティリティの使用方法

スクリプトを DCREditor.ps1 というファイルに保存した場合で、リソース ID が /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/bar のデータ収集ルールを変更する必要がある場合、これは次のコマンドを実行することで実現できます。

.\DCREditor.ps1 "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/bar"

DCR コンテンツが埋め込みコード エディターで開かれます。 編集を完了した後、スクリプト プロンプトで「Y」と入力すると、DCR に変更が適用されます。

次のステップ