次の方法で共有


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. クラスターにマネージド ID を追加します
    2. データ ソースのマネージド ID にアクセス許可を付与します。 Azure Storage からデータをフェッチするには、そのマネージド ID に、少なくとも Azure Storage アカウントでの Storage Blob Data Reader アクセス許可が必要です。
    3. イベント ハブ上でマネージド ID にアクセス許可を付与します。 イベント ハブから BLOB 通知をフェッチするには、そのマネージド ID に Azure Event Hubs での Azure Event Hubs Data Receiver アクセス許可が必要です。
    4. ターゲット データベースで、マネージド ID ポリシー を設定します。
    5. マネージド ID 認証を使用してデータ接続を作成し、データをフェッチします。

    注意事項

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

    注意事項

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

データ形式

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

      Note

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

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

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

プロパティ 説明
rawSizeBytes 未加工の (圧縮されていない) データのサイズ。 Avro/ORC/Parquet の場合、これは形式固有の圧縮が適用される前のサイズです。 このプロパティを圧縮されていないデータ サイズ (バイト単位) に設定して、元のデータ サイズを指定します。
kustoDatabase 大文字と小文字が区別される、ターゲット データベースの名前。 既定では、データはデータ接続に関連付けられているターゲット データベースに取り込まれます。 既定のデータベースをオーバーライドし、別のデータベースにデータを送信するには、このプロパティを使用します。 これを行うには、最初にマルチデータベース接続として接続を設定する必要があります。
kustoTable 大文字と小文字が区別される、既存のターゲット テーブルの名前。 [Data Connection] ペインで設定された Table をオーバーライドします。
kustoDataFormat データ形式。 [Data Connection] ペインで設定された Data format をオーバーライドします。
kustoIngestionMappingReference 使用する既存のインジェスト マッピングの名前。 [Data Connection] ペインで設定された Column mapping をオーバーライドします。
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 ストレージ接続を設定するときに、ターゲット テーブルのプロパティを指定します。

  • テーブル名
  • データ形式
  • mapping

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 のデータ接続を使用する」を参照してください。

Note

  • AppendBlob を使用すると予期しない動作が発生する可能性があるため、 BlockBlob を使用してデータを生成することを強くお勧めします。
  • Azure Data Lake Gen2 ストレージの SDK を使用するには、ファイルのアップロードに CreateFile を使用し、最後の Flush で close パラメーターを true に設定する必要があります。 Data Lake Gen2 SDK の正しい使用方法例の詳細については、「Event Grid のデータ接続を使用する」を参照してください。
  • 階層型名前空間の機能が有効になっているストレージ アカウントでは、CopyBlob 操作に続きインジェストをトリガーすることはサポートされていません。
  • イベント ハブ エンドポイントでイベントの受信が認識されない場合、Azure Event Grid によって再試行メカニズムがアクティブ化されます。 この再試行配信に失敗した場合、配信されなかったイベントは Event Grid の "配信不能" プロセスを使用してストレージ アカウントに配信できます。 詳細については、Event Grid のメッセージの配信と再試行に関する記事を参照してください。

BLOB を名前変更する

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

Note

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

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

Azure Data Explorer では、取り込み後に BLOB は削除されません。 Azure Blob Storage のライフサイクルを使用して、BLOB の削除を管理してください。 BLOB は 3 日から 5 日間保持することをお勧めします。

Event Grid の既知の問題

ローカル認証なしで作業する

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

  1. ストレージ アカウントの Event Grid システム トピックに、システム割り当てマネージド ID を割り当てます。 詳細については、「システム トピックのマネージド ID を有効にする」を参照してください。
  2. マネージド ID の送信者のアクセス許可を付与します。これには、イベント ハブの Azure Event Hubs Data Sender ロールを割り当てます。 詳細については、「宛先の Azure ロールに ID を追加する」を参照してください。
  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 インジェストは機能しません。

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

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