Azure Data Explorer と Azure Resource Graph のデータを Log Analytics ワークスペースのデータと関連付ける

Azure Data ExplorerAzure 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() を使用して 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') に変換されます。

union ではなく join 演算子を使う場合は、Azure Data Explorer クラスター内のデータを Log Analytics ワークスペースと結合するために hint を使う必要があります。 Hint.remote={Direction of the Log Analytics Workspace} を使用してください。

次に例を示します。

AzureDiagnostics
| join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)

一方のテナントの 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>

新しい 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 ワークスペースに向けてクロスサービス クエリを実行することもできます。

制限事項

クロスサービス クエリの一般的な制限事項

  • クロスサービス クエリでは、パラメーター化された関数と、その定義に他のクロスワークスペースまたはクロスサービス式 (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
  • データベース名は大文字と小文字が区別されます。
  • クラスター内のタイムスタンプ列の識別はサポートされていません。 Log Analytics の Query API は時間フィルターを渡しません。
  • クロスサービス クエリでは、データの取得のみがサポートされます。
  • Private Link (プライベート エンドポイント) と IP の制限では、クロスサービス クエリをサポートしていません。
  • mv-expand は 2,000 レコードに制限されています。
  • Azure Monitor ログでは、Azure Data Explorer で外部テーブルに対してクエリを実行できるようにする external_table() 関数はサポートされていません。 外部テーブルに対してクエリを実行するには、Azure Data Explorer でパラメータなしの関数として external_table(<external-table-name>) を定義します。 その後、式 adx("").<function-name> を使用して関数を呼び出すことができます。

Azure Resource Graph のクロスサービス クエリの制限事項

  • Microsoft Sentinel では、Azure Resource Graph へのクロスサービス クエリはサポートされていません。
  • Azure Monitor から Azure Resource Graph データのクエリを実行する場合:
    • このクエリにより、最初の 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()

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"

次のステップ