次の方法で共有


Event Grid データ接続

Event Grid インジェストは、Azure ストレージをリッスンし、サブスクライブしたイベントが発生したときに情報をプルするように Azure Data Explorer を更新するパイプラインです。 Azure Data Explorer では、BLOB 作成または BLOB 名前変更の通知に対する Azure Event Grid サブスクリプションを使用して Azure Storage (Blob Storage と ADLSv2) からの継続的なインジェストが提供され、Azure Event Hubs を介してそれらの通知が Azure Data Explorer にストリーミングされます。

Event Grid インジェスト パイプラインでは、いくつかの手順が実行されます。 特定の形式のデータが取り込まれるターゲット テーブルを Azure Data Explorer に作成します。 次に、Azure Data Explorer で Event Grid データ接続を作成します。 Event Grid データ接続では、データを送信するテーブルやテーブルのマッピングなど、イベントのルーティング情報を把握している必要があります。 また、取り込まれるデータ、ターゲット テーブル、およびマッピングを記述するインジェストのプロパティも指定します。 サンプル データを生成し、BLOB をアップロードするか、BLOB を名前変更して、接続をテストできます。 インジェスト後、BLOB を削除します。

Event Grid インジェストは、Azure portalインジェストウィザードC# または Python のプログラム、または Azure Resource Manager テンプレートを使って管理できます。

Azure Data Explorer でのデータ インジェストに関する一般的な情報については、「Azure Data Explorer のデータ インジェスト概要」を参照してください。

Event Grid データ接続の認証メカニズム

  • マネージド ID ベースのデータ接続 (推奨): マネージド ID ベースのデータ接続を使用することが、データ ソースに接続するための最も安全な方法です。 データ ソースからデータをフェッチする機能を完全に制御できます。

    マネージド ID を使用した Event Grid データ接続のセットアップには、次の手順とアクセス許可が必要です。

    1. ソース データ ストレージ アカウントの Azure サブスクリプションで EventGrid 共同作成者 ロールが割り当てられていることを確認します。
    2. クラスターにマネージド ID を追加します。
    3. マネージド ID にデータ ソースに対するアクセス許可を付与します。 Azure Storage からデータを取得するには、マネージド ID に Azure Storage アカウントに対する [ストレージ BLOB データ閲覧者] アクセス許可が必要です。
    4. マネージド ID にイベント ハブに対するアクセス許可を付与します。 イベント ハブから BLOB 通知を取得するには、マネージド ID に Azure Event Hubs に対する [Azure Event Hubs データ受信者] アクセス許可が必要です。
    5. ターゲット データベースにマネージド ID ポリシーを設定します。
    6. マネージド ID 認証を使用してデータを取得するデータ接続を作成します。

    • イベント ハブ コンシューマー グループは、コンシューマーごとに一意である 必要があります 。 すべての Azure Data Explorer データ接続に専用のコンシューマー グループを作成します。

    注意事項

    • データ ソースからマネージド ID のアクセス許可が削除されると、データ接続は機能しなくなり、データを取得できなくなります。
    • BLOB 通知がストリームされる既存の Event Hubs 名前空間でローカル認証が無効になっている場合、データ接続にはマネージド ID 認証を使用し、リソースを正しく構成する必要があります。 詳細については、Event Grid の既知の問題に関する記事を参照してください。
  • キーベースのデータ接続: マネージド ID 認証がデータ接続で指定されていない場合、接続は自動的にキーベースの認証に設定されます。 キーベースの接続では、リソース接続文字列 (Azure Event Hubs 接続文字列など) を使用してデータがフェッチされます。 Azure Data Explorer は、指定されたリソースの接続文字列を取得し、安全に保存します。 その後、接続文字列を使用して、データ ソースからデータがフェッチされます。

    注意事項

    キーがローテーションされると、データ接続は機能しなくなり、データ ソースからデータを取得できなくなります。 この問題を解決するには、データ接続を更新するか再作成します。

データ形式

  • サポートされる形式を確認してください。
  • サポートされる圧縮を確認してください。
    • 元の非圧縮データ サイズは、BLOB メタデータの一部である必要があります。それ以外の場合は、Azure Data Explorer によって推定されます。 ファイルごとのインジェストの非圧縮サイズの制限は 6 GB です。

      Event Grid 通知サブスクリプションは、BlobStorageStorageV2、または Data Lake Storage Gen2 に対して Azure Storage アカウントで設定できます。

インジェストのプロパティ

BLOB メタデータを使用して、BLOB インジェストのインジェストプロパティを指定できます。 次のプロパティを設定できます。

プロパティ 説明
rawSizeBytes 未加工の (圧縮されていない) データのサイズ。 Avro/ORC/Parquet の場合、これは形式固有の圧縮が適用される前のサイズです。 このプロパティを圧縮されていないデータ サイズ (バイト単位) に設定して、元のデータ サイズを指定します。
kustoDatabase 大文字と小文字が区別される、ターゲット データベースの名前。 既定では、データはデータ接続に関連付けられているターゲット データベースに取り込まれます。 既定のデータベースをオーバーライドし、別のデータベースにデータを送信するには、このプロパティを使用します。 これを行うには、最初にマルチデータベース接続として接続を設定する必要があります。
kustoTable 大文字と小文字が区別される、既存のターゲット テーブルの名前。 [Table] ペインで設定された Data Connection をオーバーライドします。
kustoDataFormat データ形式。 [Data format] ペインで設定された Data Connection をオーバーライドします。
kustoIngestionMappingReference 使用する既存のインジェスト マッピングの名前。 [Column mapping] ペインで設定された Data Connection をオーバーライドします。
kustoIgnoreFirstRecord true に設定した場合、Kusto で BLOB の最初の行が無視されます。 表形式のデータ (CSV、TSV など) でヘッダーを無視するために使用します。
kustoExtentTags 結果のエクステントに添付されるタグを表す文字列。
kustoCreationTime ISO 8601 文字列として書式設定された Blob のエクステント作成時間をオーバーライドします。 バックフィルに使用します。

イベント ルーティング

クラスターへのデータ接続を作成するときに、取り込まれたデータの送信先のルーティングを指定します。 既定のルーティングは、ターゲット データベースに関連付けられている接続文字列で指定されたターゲット テーブルです。 データに対する既定のルーティングは、"静的ルーティング" と呼ばれることもあります。 イベント データのプロパティを使用することで、データの代替ルーティングを指定できます。

イベント データを別のデータベースにルーティングする

代替データベースへのデータのルーティングは、既定では無効になっています。 データを別のデータベースに送信するには、最初に、マルチデータベース接続として接続を設定する必要があります。 この操作は、Azure portal、C#、Python、または ARM テンプレートで実行できます。 データベース ルーティングを許可するために使用されるユーザー、グループ、サービス プリンシパル、またはマネージド ID には、少なくともクラスターに対する共同作成者ロールと書き込みアクセス許可が必要です。 詳細については、Azure Data Explorer 用に Event Grid データ接続を作成する方法に関する記事を参照してください。

別のデータベースを指定するには、データベースインジェストのプロパティを設定します。

警告

接続をマルチデータベース データ接続として設定せずに代替データベースを指定すると、インジェストが失敗します。

イベント データを別のテーブルにルーティングする

Azure Data Explorer クラスターへの BLOB ストレージ接続を設定するときに、ターゲット テーブルのプロパティを指定します。

  • テーブル名
  • データ形式
  • マッピング

BLOB メタデータを使用して、各 BLOB のターゲット テーブルのプロパティを指定することもできます。 データは、インジェストのプロパティの指定に従って、動的にルーティングされます。

次の例は、BLOB メタデータをアップロードする前にインジェストのプロパティを設定する方法を示しています。 BLOB は異なるテーブルにルーティングされます。

さらに、ターゲット データベースを指定できます。 Event Grid データ接続は、特定のデータベースのコンテキスト内で作成されます。 そのため、このデータベースはデータ接続の既定のデータベース ルーティングです。 データを別のデータベースに送信するには、"KustoDatabase" インジェストプロパティを設定し、マルチデータベース データ接続としてデータ接続を設定します。 別のデータベースへのデータのルーティングは、既定では無効になっています (許可されません)。 複数のデータベースへのデータ ルーティングを許可 (接続をマルチデータベース データ接続として設定) しないで、データ接続のデータベースとは異なるデータベース インジェスト プロパティを設定すると、インジェストは失敗します。

詳細については、BLOB のアップロードに関する記事を参照してください。

var container = new BlobContainerClient("<storageAccountConnectionString>", "<containerName>");
await container.CreateIfNotExistsAsync();
var blob = container.GetBlobClient("<blobName>");
// Blob is dynamically routed to table `Events`, ingested using `EventsMapping` data mapping
await blob.SetMetadataAsync(
    new Dictionary<string, string>
    {
        { "rawSizeBytes", "4096" }, // the uncompressed size is 4096 bytes
        { "kustoTable", "Events" },
        { "kustoDataFormat", "json" },
        { "kustoIngestionMappingReference", "EventsMapping" },
        { "kustoDatabase", "AnotherDB" }
    }
);
await blob.UploadAsync(BinaryData.FromString(File.ReadAllText("<filePath>")));

BLOB をアップロードする

ローカル ファイルから BLOB を作成し、インジェストのプロパティを BLOB メタデータに設定して、それをアップロードすることができます。 例については、「Event Grid データ接続を使用する」を参照してください。

  • データ生成には BlockBlob の使用を強くお勧めします。AppendBlob を使用すると予期しない動作を引き起こす可能性があります。
  • Azure Data Lake Gen2 ストレージの SDK を使用するには、ファイルのアップロードに CreateFile を使用し、最後の Flush で close パラメーターを true に設定する必要があります。 Data Lake Gen2 SDK の詳細な例については、「Event Grid データ接続を使用する」を参照してください。
  • 階層型名前空間機能が有効になっているストレージ アカウントでは、 CopyBlob 操作に続くインジェストのトリガーはサポートされていません。
  • イベント ハブ エンドポイントでイベントの受信が認識されない場合、Azure Event Grid によって再試行メカニズムがアクティブ化されます。 この再試行配信に失敗した場合、配信されなかったイベントは Event Grid の "配信不能" プロセスを使用してストレージ アカウントに配信できます。 詳細については、Event Grid のメッセージの配信と再試行に関する記事を参照してください。
  • "OpenWrite" API を使用して BLOB に書き込むのはお勧めしません。これは、空の BLOB の通知をトリガーし、空の BLOB エラーが発生するためです。 さらに、同じ BLOB の重複通知や複数回のインジェストを防ぐために、ストリームのフラッシュは 1 回のみ行ってください。
  • Azure Data Explorer は、Event Grid や Storage などのアップストリーム サービスによって送信されたのと同じ BLOB に対して重複する通知を除外しようとします。 重複するイベントが検出されると、インジェストがスキップされ、エラー BlobAlreadyReceived_DuplicateEventGridNotificationがログに記録されます。これは、BLOB が既に処理されていることを意味します。

BLOB を名前変更する

ADLSv2 を使用する場合、BLOB を名前変更して、Azure Data Explorer への BLOB インジェストをトリガーできます。 例については、「BLOB を名前変更する」を参照してください。

  • ディレクトリの名前変更は ADLSv2 で実行できますが、"名前変更された BLOB" イベントおよびディレクトリ内への BLOB のインジェストはトリガーされません。 名前変更後に BLOB を取り込むには、目的の BLOB を直接名前変更します。
  • データ接続を作成するとき、または Event Grid リソースを手動で作成するときに、特定のサブジェクトを追跡するフィルターを定義した場合、これらのフィルターは対象のファイル パスに適用されます。

ストレージ ライフサイクルを使用した BLOB の削除

Azure Data Explorer へのロジック ビルドでは、インジェスト後に BLOB は削除されません。 Azure Blob Storage のライフサイクルを使用して、BLOB の削除を管理してください。 BLOB は 3 日から 5 日間保持することをお勧めします。

Event Grid の既知の問題

ローカル認証を使用しない場合の構成

BLOB 通知のストリーミングに使用されるイベント ハブを含む Event Hubs 名前空間でローカル認証が無効になっている場合、マネージド ID を使用してストレージからイベント ハブにデータが適切に流れるように、以下の手順を実行します。

  1. ストレージ アカウントの Event Grid システム トピックに、システム割り当てのマネージド ID を割り当てます。 詳細については、システム トピックのマネージド ID の有効化に関する記事を参照してください。
  2. マネージド ID にイベント ハブに対する [Azure Event Hubs データ送信者] ロールを割り当てて、送信者アクセス許可を付与します。 詳細については、ID にターゲットに対する Azure ロールの追加に関する記事を参照してください。
  3. Event Grid サブスクリプションでイベント配信にマネージド ID が使用されていることを確認します。 詳細については、ID を使用したイベント サブスクリプションの作成に関する記事を参照してください。

さらに、マネージド ID 認証を使用するように Event Grid データ接続を構成して、Azure Data Explorer がイベント ハブから通知を受信できるようにします。

Azure Data Explorer からエクスポートされたファイルに対する Event Grid インジェストを設定する

Azure Data Explorer を使用して、Event Grid インジェストに使用されるファイルをエクスポートする場合は、次の点に注意してください。

  • エクスポート コマンドに指定された接続文字列、または外部テーブルに指定された接続文字列が ADLS Gen2 形式の接続文字列 (abfss://filesystem@accountname.dfs.core.windows.netなど) であるが、ストレージ アカウントが階層型名前空間に対して有効になっていない場合、Event Grid 通知はトリガーされません。
  • アカウントが階層型名前空間に対して有効でない場合、接続文字列で Blob Storage 形式 (たとえば、https://accountname.blob.core.windows.net) を使用する必要があります。 ADLS Gen2 接続文字列を使用している場合でもエクスポートは想定どおりに動作しますが、通知はトリガーされず、Event Grid インジェストは機能しません。

カスタム コンポーネントからのストレージ イベントのエミュレート

カスタム コンポーネントを使用して Azure Storage イベントをエミュレートする場合、エミュレートされたイベントは Azure Blob Storage イベント スキーマに厳密に準拠している必要があります。Azure Data Explorer では、Event Grid SDK で解析できないイベントが破棄されるためです。