Azure Data Explorer を使って Azure Monitor からエクスポートされたデータのクエリを実行する

Azure Monitor から Azure Storage アカウントにデータをエクスポートすると、低コストのリテンション期間が有効になり、ログを別のリージョンに再割り当てすることができます。 Azure Data Explorer を使用して、Log Analytics ワークスペースからエクスポートされたデータのクエリを実行します。 構成後は、ワークスペースからストレージ アカウントに送信されるサポート対象のテーブルを、Azure Data Explorer のデータ ソースとして使用できるようになります。

プロセス フローは次のとおりです。

  1. Log Analytics ワークスペースからストレージ アカウントにデータをエクスポートします。
  2. Azure Data Explorer クラスターに外部テーブルを作成し、データ型にマッピングします。
  3. Azure Data Explorer からデータのクエリを実行する

Azure Data Explorer のエクスポートされたデータ クエリ フローを示す図。

Azure Storage にデータを送信する

Azure Monitor ログは、次のいずれかのオプションを使ってストレージ アカウントにエクスポートできます。

ヒント

既存の Azure Data Explorer クラスターを使うか、必要な構成で新しい専用クラスターを作成することができます。

Azure Blob Storage に配置された外部テーブルを作成する

外部テーブルを使って、Azure Data Explorer をストレージ アカウントにリンクします。 外部テーブルは、Kusto データベースの外部に格納されているデータを参照する Kusto スキーマ エンティティです。 外部テーブルには、テーブルと同様に、適切に定義されたスキーマがあります。 データは、テーブルとは異なり、Kusto クラスターの外部に格納され管理されます。 前のセクションからエクスポートされたデータは、JSON 行に保存されます。

参照を作成するには、エクスポートされたテーブルのスキーマが必要です。 Log Analytics から getschema 演算子を使って、テーブルの列とそのデータ型を含むこの情報を取得します。

Log Analytics テーブル スキーマを示すスクリーンショット。

これで、出力を使用して、外部テーブルを構築するための Kusto クエリを作成できました。 Azure Storage または Azure Data Lake での外部テーブルの作成と変更に関する記事のガイダンスに従って、JSON 形式の外部テーブルを作成します。 次に、Azure Data Explorer データベースからクエリを実行します。

Note

外部テーブルの作成は、2 つのプロセスから構成されています。 最初のプロセスは、外部テーブルの作成です。 2 つ目のプロセスはマッピングの作成です。

次の PowerShell スクリプトを使うと、テーブルとマッピングに対して create コマンドを作成できます。

PARAM(
    $resourcegroupname, #The name of the Azure resource group
    $TableName, # The Log Analytics table you want to convert to an external table
    $MapName, # The name of the map
    $subscriptionId, # The ID of the subscription
    $WorkspaceId, # The Log Analytics WorkspaceId
    $WorkspaceName, # The Log Analytics workspace name
    $BlobURL, # The Blob URL where the data is saved
    $ContainerAccessKey, # The blob container Access Key (option to add an SAS URL)
    $ExternalTableName = $null # The External Table name, null to use the same name
)

if($null -eq $ExternalTableName) {
    $ExternalTableName = $TableName
}

$query = $TableName + ' | getschema | project ColumnName, DataType'

$output = (Invoke-AzOperationalInsightsQuery -WorkspaceId $WorkspaceId -Query $query).Results

$FirstCommand = @()
$SecondCommand = @()

foreach ($record in $output) {
    if ($record.DataType -eq 'System.DateTime') {
        $dataType = 'datetime'
    } elseif ($record.DataType -eq 'System.Int32') {
        $dataType = 'int32'
    } elseif ($record.DataType -eq 'System.Double') {
        $dataType = 'double'
    } else {
        $dataType = 'string'
    }
    $FirstCommand += $record.ColumnName + ":" + "$dataType" + ","
    $SecondCommand += "{`"column`":" + "`"" + $record.ColumnName + "`"," + "`"datatype`":`"$dataType`",`"path`":`"$." + $record.ColumnName + "`"},"
}
$schema = ($FirstCommand -join '') -replace ',$'
$mapping = ($SecondCommand -join '') -replace ',$'

$CreateExternal = @'
.create external table {0} ({1})
kind=blob
partition by (TimeGeneratedPartition:datetime = bin(TimeGenerated, 1min))
pathformat = (datetime_pattern("'y='yyyy'/m='MM'/d='dd'/h='HH'/m='mm", TimeGeneratedPartition))
dataformat=multijson
(
   h@'{2}/WorkspaceResourceId=/subscriptions/{4}/resourcegroups/{6}/providers/microsoft.operationalinsights/workspaces/{5};{3}'
)
with
(
   docstring = "Docs",
   folder = "ExternalTables"
)
'@ -f $TableName, $schema, $BlobURL, $ContainerAccessKey, $subscriptionId, $WorkspaceName.ToLower(), $resourcegroupname.ToLower(),$WorkspaceId

$createMapping = @'
.create external table {0} json mapping "{1}" '[{2}]'
'@ -f $ExternalTableName, $MapName, $mapping

Write-Host -ForegroundColor Red 'Copy and run the following commands (one by one), on your Azure Data Explorer cluster query window to create the external table and mappings:'
write-host -ForegroundColor Green $CreateExternal
Write-Host -ForegroundColor Green $createMapping

次の図に、出力の例を示します。

ExternalTable create コマンドの出力を示すスクリーンショット。

ヒント

  • Azure Data Explorer クライアント ツールにスクリプトの出力をコピーして貼り付けてから、実行して、テーブルとマッピングを作成します。
  • コンテナー内のすべてのデータを使う場合は、スクリプトを変更し、URL を https://your.blob.core.windows.net/containername;SecKey に変更します

Azure Data Explorer からエクスポートされたデータのクエリを実行する

マッピングを構成した後、Azure Data Explorer からエクスポートされたデータに対してクエリを実行できます。 クエリには、次の例のように、external_table 関数が必要です。

external_table("HBTest","map") | take 10000

Query Log Analytics のエクスポートされたデータを示すスクリーンショット。

次のステップ

Azure Data Explorer のクエリの記述に関するページをご覧ください。