次の方法で共有


チュートリアル: Azure Data Explorer で監視データを取り込んでクエリを実行する

このチュートリアルでは、コードを記述せずに、診断ログとアクティビティ ログから Azure Data Explorer クラスターにデータを取り込む方法について説明します。 この簡単なインジェスト方法を使用すると、データ分析のために Azure Data Explorer のクエリをすばやく開始できます。

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

  • Azure Data Explorer のデータベースに、テーブルと取り込みのマッピングを作成します。
  • 更新ポリシーを使用して、取り込まれたデータの形式を設定します。
  • イベント ハブを作成し、それを Azure Data Explorer に接続します。
  • Azure Monitor の診断メトリックとログアクティビティ ログからイベント ハブにデータをストリーム配信します。
  • Azure Data Explorer を使用して、取り込まれたデータのクエリを実行します。

注意

同じ Azure の場所またはリージョンに、すべてのリソースを作成します。

前提条件

Azure Monitor データ プロバイダー: 診断メトリックとログ、アクティビティ ログ

次のセクションでは、Azure Monitor 診断メトリックとログとアクティビティ ログによって提供されるデータを表示し、理解します。 これらのデータ スキーマに基づいてインジェスト パイプラインを作成します。 ログ内の各イベントには、レコードの配列があります。 このレコードの配列は、チュートリアルの後半で分割します。

診断メトリックとログおよびアクティビティ ログの例

Azure サービスは、Azure 診断メトリックとログとアクティビティ ログを出力します。 これらのログは、そのサービスの操作に関するデータを提供します。

診断メトリックの例

診断メトリックは、1 分の時間グレインでデータを集計します。 次の例は、クエリ期間の Azure Data Explorer メトリック イベント スキーマを示しています。

{
    "records": [
    {
        "count": 14,
        "total": 0,
        "minimum": 0,
        "maximum": 0,
        "average": 0,
        "resourceId": "/SUBSCRIPTIONS/<subscriptionID>/RESOURCEGROUPS/<resource-group>/PROVIDERS/MICROSOFT.KUSTO/CLUSTERS/<cluster-name>",
        "time": "2018-12-20T17:00:00.0000000Z",
        "metricName": "QueryDuration",
        "timeGrain": "PT1M"
    },
    {
        "count": 12,
        "total": 0,
        "minimum": 0,
        "maximum": 0,
        "average": 0,
        "resourceId": "/SUBSCRIPTIONS/<subscriptionID>/RESOURCEGROUPS/<resource-group>/PROVIDERS/MICROSOFT.KUSTO/CLUSTERS/<cluster-name>",
        "time": "2018-12-21T17:00:00.0000000Z",
        "metricName": "QueryDuration",
        "timeGrain": "PT1M"
    }
    ]
}

Azure Data Explorer で取り込みパイプラインを設定する

Azure Data Explorer のパイプラインの設定には、テーブルの作成やデータの取り込みなど、いくつかの手順が含まれています。 データの操作、マップ、更新を行うこともできます。

Azure Data Explorer の Web UI に接続する

Azure Data Explorer の TestDatabase データベースで [クエリ] を選択して、Azure Data Explorer の Web UI を開きます。

[クエリ] ページ。

ターゲット テーブルを作成する

Azure Monitor ログの構造は表形式ではありません。 データを操作し、各イベントを 1 つ以上のレコードに展開する必要があります。 アクティビティ ログ用の ActivityLogsRawRecords という名前の中間テーブルに生データを取り込み、診断メトリックとログ用 の DiagnosticRawRecords を取り込みます。 その時点で、データを操作して展開します。 更新ポリシーを使用して、展開されたデータをアクティビティ ログ用 の ActivityLogs テーブル、診断メトリック用 の DiagnosticMetrics 、診断ログ用 の DiagnosticLogs に取り込みます。 このプロセスでは、アクティビティ ログを取り込むための 2 つの個別のテーブルと、診断メトリックとログを取り込むための 3 つの個別のテーブルを作成する必要があることを意味します。

Azure Data Explorer の Web UI を使用して、Azure Data Explorer データベースにターゲット テーブルを作成します。

診断メトリックのためのテーブルを作成する

  1. TestDatabase データベースで、診断メトリック レコードを格納する DiagnosticMetrics という名前のテーブルを作成します。 次の .create table 管理コマンドを使用します。

    .create table DiagnosticMetrics (Timestamp:datetime, ResourceId:string, MetricName:string, Count:int, Total:double, Minimum:double, Maximum:double, Average:double, TimeGrain:string)
    
  2. [実行] を選択してテーブルを作成します。

    クエリを実行。

  3. 次のクエリを使用して、データ操作用の TestDatabase データベースに DiagnosticRawRecords という名前の中間データ テーブルを作成します。 [実行] を選択してテーブルを作成します。

    .create table DiagnosticRawRecords (Records:dynamic)
    
  4. 中間テーブルのアイテム保持ポリシーをゼロに設定します。

    .alter-merge table DiagnosticRawRecords policy retention softdelete = 0d
    

テーブル マッピングを作成する

データ形式は jsonされているため、データ マッピングを作成する必要があります。 json マッピングでは、各 JSON パスがテーブルの列名に接続されます。 JSON パスに特殊文字が含まれる場合は、['Property Name'] としてエスケープします。 詳しくは、「JSONPath 構文」を参照してください。

診断メトリックとログをテーブルにマップする

次のクエリを使用して、診断メトリックとログ データをテーブルにマップします。

.create table DiagnosticRawRecords ingestion json mapping 'DiagnosticRawRecordsMapping' '[{"column":"Records","Properties":{"path":"$.records"}}]'

メトリックおよびログのデータの更新ポリシーを作成する

診断メトリックのデータ更新ポリシーを作成する

  1. コレクション内の各値が個別の行を取得するように、診断メトリック レコードのコレクションを拡張する 関数 を作成します。 mv-expand 演算子を使用します。

    .create function DiagnosticMetricsExpand() {
       DiagnosticRawRecords
       | mv-expand events = Records
       | where isnotempty(events.metricName)
       | project
           Timestamp = todatetime(events['time']),
           ResourceId = tostring(events.resourceId),
           MetricName = tostring(events.metricName),
           Count = toint(events['count']),
           Total = todouble(events.total),
           Minimum = todouble(events.minimum),
           Maximum = todouble(events.maximum),
           Average = todouble(events.average),
           TimeGrain = tostring(events.timeGrain)
    }
    
  2. 更新ポリシーをターゲット テーブルに追加します。 このポリシーは、 DiagnosticRawRecords 中間データ テーブル内の新しく取り込まれたデータに対してクエリを自動的に実行し、その結果を DiagnosticMetrics テーブルに取り込みます。

    .alter table DiagnosticMetrics policy update @'[{"Source": "DiagnosticRawRecords", "Query": "DiagnosticMetricsExpand()", "IsEnabled": "True", "IsTransactional": true}]'
    

Azure Event Hubs 名前空間を作成する

Azure 診断設定により、ストレージ アカウントまたはイベント ハブへのメトリックとログのエクスポートが可能になります。 このチュートリアルでは、メトリックとログをイベント ハブ経由でルーティングします。 次の手順で、診断メトリックとログのイベント ハブ名前空間とイベント ハブを作成します。 Azure Monitor は、アクティビティ ログ用のイベント ハブ insights-operational-logs を作成します。

  1. Azure portal で Azure Resource Manager テンプレートを使用して、イベント ハブを作成します。 この記事の残りの手順を実行するには、[Azure へのデプロイ] ボタンを右クリックして、[新しいウィンドウで開く] を選択します。 [Azure へのデプロイ] ボタンをクリックすると、Azure portal に移動します。

    [Azure へのデプロイ] ボタン。

  2. 診断ログ用の Event Hubs 名前空間とイベント ハブを作成します。 Event Hubs 名前空間を作成する方法について説明します。

  3. フォームに次の情報を入力します。 次の表に記載されていない設定については、既定値を使用してください。

    設定 推奨値 説明
    サブスクリプション あなたのサブスクリプション イベント ハブに使用する Azure サブスクリプションを選択します。
    リソース グループ test-resource-group 新しいリソース グループを作成します。
    Location ニーズに最も適したリージョンを選択します。 他のリソースと同じ場所に、Event Hubs 名前空間を作成します。
    名前空間名 AzureMonitoringData 名前空間を識別する一意の名前を選択します。
    イベント ハブ名 DiagnosticData イベント ハブは、固有のスコープ コンテナーを提供する名前空間以下にあります。
    コンシューマー グループ名 adxpipeline コンシューマー グループ名を作成します。 コンシューマー グループを使用すると、複数のアプリケーションを使用して、それぞれがイベントストリームの個別のビューを持つことができます。

Azure Monitor のメトリックとログをイベント ハブに接続する

ここで、診断メトリックとログ、アクティビティ ログをイベント ハブに接続する必要があります。

診断メトリックとログをイベント ハブに接続する

メトリックをエクスポートするリソースを選択します。 診断データのエクスポートは、Event Hubs 名前空間、Azure Key Vault、Azure IoT Hub、Azure Data Explorer クラスターなど、複数のリソースの種類でサポートされます。 このチュートリアルでは、リソースとして Azure Data Explorer クラスターを使用します。 クエリ パフォーマンス メトリックとインジェスト結果ログを確認できます。

  1. Azure portal でお使いの Kusto クラスターを選択します。

  2. [診断設定] を選択してから、[診断をオンにする] リンクを選択します。

    診断設定

  3. [診断設定] ペインが開きます。 次の手順を実行します。

    1. 診断ログ データに ADXExportedData という名前を付けます。

    2. [ログ] で、[SucceededIngestion][FailedIngestion] の両方のチェック ボックスをオンにします。

    3. [メトリック][クエリ パフォーマンス] チェック ボックスをオンにします。

    4. [イベント ハブへのストリーム] チェック ボックスをオンにします。

    5. [構成] をクリックします。

      [診断設定] ペイン。

  4. [イベント ハブの選択] ウィンドウで、自分が作成したイベント ハブに診断ログからデータをエクスポートする方法を構成します。

    1. [イベント ハブの名前空間の選択] リストで、AzureMonitoringData を選択します。
    2. [イベント ハブ名を選択する] リストで、DiagnosticData を選択します。
    3. [イベント ハブ ポリシー名の選択] リストで、RootManagerSharedAccessKey を選択します。
    4. [OK] を選択します。
  5. [保存] を選択します。

イベント ハブに送られてくるデータを確認する

  1. 接続が定義され、イベント ハブへのアクティビティ ログのエクスポートが完了するまで数分待ちます。 ご自分の Event Hubs 名前空間に移動して、自分が作成したイベント ハブを確認します。

    イベント ハブが作成されました。

  2. イベント ハブに送られてくるデータを確認します。

    イベント ハブのデータ。

イベント ハブを Azure Data Explorer に接続する

次に、診断メトリックとログ、アクティビティ ログのデータ接続を作成する必要があります。

診断メトリックとログ、アクティビティ ログのデータ接続を作成する

  1. kustodocs という名前の Azure Data Explorer クラスターで、左側のメニューの [データベース] を選択します。

  2. [データベース] ウィンドウで、ご自分の TestDatabase データベースを選択します。

  3. 左側のメニューで、[データ インジェスト] を選択します。

  4. [データ インジェスト] ウィンドウで、[+ データ接続の追加] を選びます。

  5. [データ接続] ウィンドウで、次の情報を入力します。

    イベント ハブのデータ接続。

  1. [データ接続] ウィンドウで、次の設定を使用します。

    データ ソース:

    設定 推奨値 フィールドの説明
    データ接続名 DiagnosticsLogsConnection Azure データ エクスプローラーで作成する接続の名前。
    イベント ハブの名前空間 AzureMonitoringData 以前に選択した、名前空間を識別する名前。
    イベント ハブ DiagnosticData 作成したイベント ハブ。
    コンシューマー グループ adxpipeline 作成したイベント ハブに定義されているコンシューマー グループ。

    ターゲットテーブル:

    ルーティングには、"静的" と "動的" という 2 つのオプションがあります。 このチュートリアルでは、静的ルーティング (既定値) を使用します。ここでは、テーブル名、データ形式、マッピングを指定します。 [My data includes routing info]\(データにルーティング情報が含まれている\) をオフのままにしておきます。

    設定 推奨値 フィールドの説明
    Table DiagnosticRawRecords 自分が TestDatabase データベースに作成したテーブル。
    データ形式 JSON テーブルで使用される形式。
    列マッピング DiagnosticRawRecordsMapping(診断未加工データ記録マッピング) 自分が TestDatabase データベースに作成したマッピング。これにより、受信 JSON データが DiagnosticRawRecords テーブルの列名とデータ型にマッピングされます。
  2. [作成] を選択します

新しいテーブルのクエリを実行する

パイプラインをデータが流れるようになりました。 クラスターのインジェストには既定で 5 分かかります。そのため、クエリを開始する前に数分待ちます。

診断メトリック テーブルに対してクエリを実行する

次のクエリでは、Azure Data Explorer の診断メトリック レコードからクエリ期間のデータを分析します。

DiagnosticMetrics
| where Timestamp > ago(15m) and MetricName == 'QueryDuration'
| summarize avg(Average)

クエリの結果:

avg_Average
00:06.156