Azure Data Explorer と Azure Resource Graph のデータを Log Analytics ワークスペースのデータと関連付ける
Azure Data Explorer と Azure Resource Graph のデータを Log Analytics ワークスペースと Application Insights リソースのデータと関連付けて、Azure Monitor ログで分析を強化できます。 Log Analytics ワークスペースにもデータを保存する Microsoft Sentinel では、Azure Data Explorer へのクロスサービス クエリはサポートされますが、Azure Resource Graph へはサポートされていません。 この記事では、Log Analytics ワークスペースにデータを保存するサービスからクロスサービス クエリを実行する方法について説明します。
Log Analytics Web UI、ブック、PowerShell、REST API など、Kusto 照会言語 (KQL) クエリをサポートする任意のクライアント ツールを使って、クロスサービス クエリを実行します。
必要なアクセス許可
Azure Data Explorer または Azure Resource Graph のデータを Log Analytics ワークスペース内のデータに関連付けるクロスサービス クエリを実行するには、次が必要です。
- クエリを実行する Log Analytics ワークスペースに対する
Microsoft.OperationalInsights/workspaces/query/*/read
アクセス許可。これは、たとえば、Log Analytics 閲覧者組み込みロールによって提供されます。 - Azure Resource Graph でクエリを実行するリソースに対する閲覧者アクセス許可。
- Azure Data Explorer でクエリを実行するテーブルに対するビューアー アクセス許可。
実装の考慮事項
クロスサービスの一般的な考慮事項
データベース名は大文字と小文字が区別されます。
パラメーター化されていない関数と、定義に他のクロスワークスペースまたはクロスサービスの式が含まれていない関数を使います (
adx()
、arg()
、resource()
、workspace()
、app()
など)。クロスサービス クエリでは、データの取得のみがサポートされます。
クロスサービス クエリでは、".show" コマンドのみがサポートされます。 この機能により、クロス クラスター クエリで Azure Monitor、Azure Data Explorer、または Azure Resource Graph の表形式関数を直接参照できます。 次のコマンドがクロスサービス クエリでサポートされています。
.show functions
.show function {FunctionName}
.show database {DatabaseName} schema as json
mv-expand
では、最大 2,000 個のレコードがサポートされます。Azure Monitor ログでは、Azure Data Explorer で外部テーブルに対してクエリを実行できるようにする
external_table()
関数はサポートされていません。 外部テーブルに対してクエリを実行するには、Azure Data Explorer でパラメータなしの関数としてexternal_table(<external-table-name>)
を定義します。 その後、式adx("").<function-name>
を使用して関数を呼び出すことができます。union ではなく
join
演算子を使う場合は、hint
を使って、Azure Data Explorer または Azure Resource Graph 内のデータと、Log Analytics ワークスペース内のデータを結合する必要があります。Hint.remote={direction of the Log Analytics workspace}
を使用してください。次に例を示します。
AzureDiagnostics | join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
クラスター内のタイムスタンプ列の識別はサポートされていません。 Log Analytics の Query API は時間フィルターを渡しません。
IP 制限または Private Link (プライベート エンドポイント) を使って構成された Data Explorer クラスターでは、クロスサービス クエリはサポートされません。
Azure Resource Graph のクロスサービス クエリの考慮事項
- Azure Monitor から Azure Resource Graph データのクエリを実行する場合:
join
オペレーターを使うと、1 つの Azure Resource Graph テーブルと Log Analytics ワークスペース内の 1 つのテーブルのデータを結合できます。- このクエリにより、最初の 1,000 レコードのみが返されます。
- Azure Monitor は Azure Resource Graph クエリのエラーを返しません。
- Log Analytics クエリ エディターは有効な Azure Resource Graph クエリを構文エラーとしてマークします。
- 次の演算子はサポートされていません:
smv-apply()
、rand()
、arg_max()
、arg_min()
、avg()
、avg_if()
、countif()
、sumif()
、percentile()
、percentiles()
、percentilew()
、percentilesw()
、stdev()
、stdevif()
、stdevp()
、variance()
、variancep()
、varianceif()
。
- Microsoft Sentinel では、Azure Resource Graph へのクロスサービス クエリはサポートされていません。
adx() を使用して Azure Data Explorer のデータのクエリを実行する
Azure Data Explorer クラスターの識別子をクエリの adx
パターン内に入力し、その後にデータベース名とテーブルを入力します。
adx('https://help.kusto.windows.net/Samples').StormEvents
Azure Data Explorer クラスター テーブルを Log Analytics ワークスペースと結合する
クラスター テーブルを Log Analytics ワークスペースと結合するには、union
コマンドを使用します。
次に例を示します。
union customEvents, adx('https://help.kusto.windows.net/Samples').StormEvents
| take 10
let CL1 = adx('https://help.kusto.windows.net/Samples').StormEvents;
union customEvents, CL1 | take 10
ヒント
次の短縮形を使用できます。ClusterName/InitialCatalog。 たとえば、adx('help/Samples')
は adx('help.kusto.windows.net/Samples')
に変換されます。
一方のテナントの Azure Data Explorer クラスターのデータを他方の Azure Monitor リソースと結合する
サービス間のクロス テナント クエリはサポートされていません。 両方のリソースにまたがるクエリを実行するには、1 つのテナントにサインインします。
Azure Data Explorer リソースがテナント A にあり、Log Analytics ワークスペースがテナント B にある場合は、次の方法のいずれかを使用します。
- Azure Data Explorer を使って、異なるテナントにプリンシパルのロールを追加します。 テナント B のユーザー ID を、許可されているユーザーとして Azure Data Explorer クラスターに追加します。 Azure Data Explorer クラスター上の TrustedExternalTenant プロパティにテナント B が含まれていることを確認します。テナント B でクロス クエリ全体を実行します。
- Lighthouse を使用して、Azure Monitor リソースをテナント A に射影します。
さまざまなテナントから Azure Data Explorer クラスターに接続する
Kusto Explorer によって、ユーザー アカウントの所属元であるテナントに自動的にサインインされます。 同じユーザー アカウントを使用して他のテナントのリソースにアクセスするには、接続文字列に TenantId
を明示的に指定する必要があります。
Data Source=https://ade.applicationinsights.io/subscriptions/SubscriptionId/resourcegroups/ResourceGroupName;Initial Catalog=NetDefaultDB;AAD Federated Security=True;Authority ID=TenantId
arg() を使用して Azure Resource Graph のデータのクエリを実行する (プレビュー)
arg("")
パターンに続けて Azure Resource Graph テーブル名を入力します。
次に例を示します。
arg("").<Azure-Resource-Graph-table-name>
ヒント
arg()
演算子は、統合された Microsoft Defender プラットフォームで高度な追求を行うようになりました。 この機能を使用してクエリを実行できるのは Microsoft Sentinel データに対してだけです。 詳細については、「Azure Resource Graph クエリに arg() 演算子を使用する」をご覧ください
新しい Azure Resource Graph クロスサービス クエリ機能を使っている Azure Log Analytics クエリのサンプルを次に示します。
Azure Resource Graph クエリの結果に基づいて Log Analytics クエリをフィルター処理します。
arg("").Resources | where type == "microsoft.compute/virtualmachines" and properties.hardwareProfile.vmSize startswith "Standard_D" | join ( Heartbeat | where TimeGenerated > ago(1d) | distinct Computer ) on $left.name == $right.Computer
ARG クエリから取得した特定のリソースにのみ適用されるアラート ルールを作成します。
タグに基づいてリソースを除外します。たとえば、"Test" タグを使って VM のアラートをトリガーしないようにします。
arg("").Resources | where tags.environment=~'Test' | project name
CPU 使用率に関連するパフォーマンス データを取得し、"prod" タグを使ってリソースに対してフィルター処理します。
InsightsMetrics | where Name == "UtilizationPercentage" | lookup ( arg("").Resources | where type == 'microsoft.compute/virtualmachines' | project _ResourceId=tolower(id), tags ) on _ResourceId | where tostring(tags.Env) == "Prod"
その他のユースケース:
- VM を 24 時間 365 日実行する必要があるかどうかや夜間にシャットダウンする必要があるかどうかを判断するには、タグを使います。
- 特定の数のコアを含む任意のサーバーでアラートを表示します。
Log Analytics ワークスペースからクロスサービス クエリに基づいてアラートを作成する
クロスサービス クエリに基づいて Log Analytics ワークスペースからアラート ルールを作成するには、「ログ検索アラート ルールを作成または編集する」の手順に従って、[スコープ] タブで Log Analytics ワークスペースを選択します。
Note
また、関連するリソースをアラートのスコープとして選択すると、Azure Data Explorer と Azure Resource Graph から Log Analytics ワークスペースに向けてクロスサービス クエリを実行することもできます。
Azure Resource Graph テーブルを Log Analytics ワークスペースと結合する
クラスター テーブルを Log Analytics ワークスペースと結合するには、union
コマンドを使用します。
次に例を示します。
union AzureActivity, arg("").Resources
| take 10
let CL1 = arg("").Resources ;
union AzureActivity, CL1 | take 10
union ではなく join
演算子を使う場合は、Azure Resource Graph のデータを Log Analytics ワークスペースのデータと結合するために hint
を使う必要があります。 Hint.remote={Direction of the Log Analytics Workspace}
を使用してください。 次に例を示します。
Perf | where ObjectName == "Memory" and (CounterName == "Available MBytes Memory")
| extend _ResourceId = replace_string(replace_string(replace_string(_ResourceId, 'microsoft.compute', 'Microsoft.Compute'), 'virtualmachines','virtualMachines'),"resourcegroups","resourceGroups")
| join hint.remote=left (arg("").Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project _ResourceId=id, tags) on _ResourceId | project-away _ResourceId1 | where tostring(tags.env) == "prod"