Połączenie danych usługi Event Grid

Pozyskiwanie danych przez usługę Event Grid to potok przetwarzania, który nasłuchuje zdarzeń w usłudze Azure Storage i powiadamia usługę Azure Data Explorer o konieczności pobrania informacji, gdy wystąpią zasubskrybowane zdarzenia. Usługa Azure Data Explorer oferuje ciągłe pozyskiwanie danych z usługi Azure Storage (Azure Blob Storage i ADLSv2) przy użyciu subskrypcji Azure Event Grid dla powiadomień o utworzeniu lub zmianie nazwy obiektu blob oraz przesyłanie strumieniowe tych powiadomień do usługi Azure Data Explorer za pośrednictwem usługi Azure Event Hubs.

Potok pozyskiwania danych usługi Event Grid składa się z kilku etapów. W usłudze Azure Data Explorer utworzysz tabelę docelową, w której dane w określonym formacie zostaną pozyskane. Następnie utworzysz połączenie danych usługi Event Grid w usłudze Azure Data Explorer. Połączenie danych usługi Event Grid musi mieć informacje o routingu zdarzeń, takie jak tabela, do której mają trafiać dane, oraz mapowanie tabeli. Należy również określić właściwości pozyskiwania danych, które opisują dane do pozyskania, tabelę docelową i mapowanie. Możesz wygenerować przykładowe dane i przesłać obiekty blob lub zmienić nazwę obiektów blob, aby przetestować połączenie. Usuń obiekty blob po zaimportowaniu.

Pozyskiwaniem danych w usłudze Event Grid można zarządzać za pośrednictwem portalu Azure, przy użyciu kreatora pozyskiwania danych, programowo za pomocą języka C# lub Python, albo przy użyciu szablonu usługi Azure Resource Manager.

Aby uzyskać ogólne informacje na temat pozyskiwania danych w usłudze Azure Data Explorer, zobacz Omówienie pozyskiwania danych w usłudze Azure Data Explorer.

Mechanizmy uwierzytelniania połączeń danych usługi Event Grid

  • Połączenie danych oparte na tożsamości zarządzanej (zalecane): użycie połączenia danych opartego na tożsamości zarządzanej jest najbezpieczniejszym sposobem nawiązywania połączenia ze źródłami danych. Zapewnia pełną kontrolę nad możliwością pobierania danych ze źródła danych.

    Konfiguracja połączenia danych usługi Event Grid przy użyciu tożsamości zarządzanej wymaga następujących kroków i uprawnień:

    1. Upewnij się, że masz przypisaną rolę Współautor usługi EventGrid w subskrypcji Azure dla zasobów konta magazynu danych źródła.
    2. Dodaj tożsamość zarządzaną do klastra.
    3. Nadaj uprawnienia tożsamości zarządzanej w źródle danych. Aby pobierać dane z usługi Azure Storage, tożsamość zarządzana musi mieć przypisaną co najmniej rolę Storage Blob Data Reader dla konta usługi Azure Storage.
    4. Udziel uprawnień tożsamości zarządzanej w centrum zdarzeń. Aby pobierać powiadomienia o obiektach blob z centrum zdarzeń, tożsamość zarządzana musi mieć uprawnienia Azure Event Hubs Data Receiver w usłudze Azure Event Hubs.
    5. Ustaw zasady tożsamości zarządzanej w docelowych bazach danych.
    6. Utwórz połączenie z danymi za pomocą uwierzytelniania przy użyciu tożsamości zarządzanej, aby pobrać dane.

    Uwaga

    • Grupa odbiorców centrum zdarzeń musi być unikatowa dla poszczególnych użytkowników. Utwórz dedykowaną grupę odbiorców dla każdego połączenia danych usługi Azure Data Explorer.

    Uwaga

    • Jeśli uprawnienia tożsamości zarządzanej zostaną usunięte ze źródła danych, połączenie danych nie będzie już działać i nie będzie mogło pobrać danych ze źródła danych.
    • Jeśli uwierzytelnianie lokalne jest wyłączone w istniejącej przestrzeni nazw usługi Event Hubs, w której powiadomienia obiektów blob są przesyłane strumieniowo, musisz użyć uwierzytelniania za pomocą tożsamości zarządzanej na potrzeby połączenia danych i poprawnie skonfigurować zasoby. Aby uzyskać więcej informacji, zobacz Znane problemy z usługą Event Grid.
  • Połączenie danych oparte na kluczu: jeśli dla połączenia danych nie określono uwierzytelniania za pomocą tożsamości zarządzanej, połączenie automatycznie używa uwierzytelniania opartego na kluczu. Połączenia oparte na kluczach pobierają dane przy użyciu parametrów połączenia zasobu, takich jak parametry połączenia usługi Azure Event Hubs. Usługa Azure Data Explorer pobiera parametry połączenia zasobu dla określonego zasobu i bezpiecznie je zapisuje. Następnie ciąg połączenia służy do pobierania danych ze źródła danych.

    Uwaga

    Jeśli klucz zostanie obrócony, połączenie danych nie będzie już działać i nie będzie mogło pobrać danych ze źródła danych. Aby rozwiązać ten problem, zaktualizuj lub ponownie utwórz połączenie danych.

Format danych

  • Zobacz obsługiwane formaty.
  • Zobacz obsługiwane kompresje.
    • Oryginalny nieskompresowany rozmiar danych powinien stanowić część metadanych obiektu blob, w przeciwnym razie usługa Azure Data Explorer oszacuje go. Limit nieskompresowanego rozmiaru na plik podczas pozyskiwania danych wynosi 6 GB.

      Uwaga

      Subskrypcję powiadomień usługi Event Grid można skonfigurować dla kont usługi Azure Storage dla BlobStorage, StorageV2 lub Data Lake Storage Gen2.

Właściwości pozyskiwania danych

Można określić właściwości pozyskiwania danych dla pozyskiwania z obiektu blob za pomocą metadanych obiektu blob. Można ustawić następujące właściwości:

Właściwości Opis
rawSizeBytes Rozmiar nieprzetworzonych (nieskompresowanych) danych. W przypadku avro/ORC/Parquet jest to rozmiar przed zastosowaniem kompresji specyficznej dla formatu. Podaj oryginalny rozmiar danych, ustawiając tę właściwość na nieskompresowany rozmiar danych w bajtach.
kustoDatabase Nazwa docelowej bazy danych z rozróżnianiem wielkości liter. Domyślnie dane są importowane do docelowej bazy danych skojarzonej z połączeniem z danymi. Użyj tej właściwości, aby zastąpić domyślną bazę danych i wysłać dane do innej bazy danych. W tym celu należy najpierw skonfigurować połączenie jako połączenie z wieloma bazami danych.
kustoTable Nazwa istniejącej tabeli docelowej z rozróżnianiem wielkości liter. Zastępuje ustawienie Table określone w panelu Data Connection.
kustoDataFormat Format danych. Zastępuje Data format ustawione w okienku Data Connection.
kustoIngestionMappingReference Nazwa istniejącego mapowania pozyskiwania danych, które ma zostać użyte. Zastępuje ustawienie ustawione w panelu Data ConnectionColumn mapping
kustoIgnoreFirstRecord Jeśli ustawiono na true, usługa Kusto ignoruje pierwszy wiersz obiektu blob. Użyj danych w formacie tabelarycznym (CSV, TSV lub podobnych), aby zignorować nagłówki.
kustoExtentTags Ciąg znaków reprezentujący znaczniki, które zostaną dołączone do wynikowego zakresu.
kustoCreationTime Nadpisuje czas utworzenia ekstentu dla obiektu blob, sformatowany jako ciąg w formacie ISO 8601. Służy do uzupełniania brakujących danych.

Trasowanie zdarzeń

Podczas tworzenia połączenia danych z klastrem należy określić routing dla miejsca wysyłania pozyskanych danych. Domyślnie kierowanie odbywa się do tabeli docelowej określonej w parametrach połączenia skojarzonych z docelową bazą danych. Domyślny routing danych jest również określany jako routing statyczny. Możesz określić alternatywny routing dla danych przy użyciu właściwości danych zdarzenia.

Kierowanie danych zdarzeń do alternatywnej bazy danych

Routing danych do alternatywnej bazy danych jest domyślnie wyłączony. Aby wysłać dane do innej bazy danych, należy najpierw ustawić połączenie jako połączenie z wieloma bazami danych. Można to zrobić w portalu Azure, w języku C#, Python lub za pomocą szablonu ARM. Użytkownik, grupa, jednostka usługi lub tożsamość zarządzana używana do zezwalania na routing bazy danych musi mieć co najmniej rolę współautora i uprawnienia do zapisu w klastrze. Aby uzyskać więcej informacji, zobacz Tworzenie połączenia danych usługi Event Grid dla usługi Azure Data Explorer.

Aby określić alternatywną bazę danych, ustaw Databasewłaściwość pozyskiwania danych.

Ostrzeżenie

Określanie alternatywnej bazy danych bez ustawiania połączenia jako połączenia multi-bazodanowego powoduje niepowodzenie importowania.

Przekierowywanie danych zdarzeń do alternatywnej tabeli

Podczas konfigurowania połączenia magazynu obiektów blob z klastrem usługi Azure Data Explorer określ właściwości tabeli docelowej:

  • nazwa tabeli
  • format danych
  • mapowanie

Można również określić właściwości tabeli docelowej dla każdego obiektu blobu przy użyciu metadanych blobu. Dane będą dynamicznie kierowane zgodnie z właściwościami pozyskiwania.

Poniższy przykład pokazuje, jak ustawić właściwości pozyskiwania w metadanych obiektu blob przed jego przesłaniem. Bloby są kierowane do różnych tabel.

Ponadto można określić docelową bazę danych. Połączenie danych usługi Event Grid jest tworzone w kontekście określonej bazy danych. W związku z tym ta baza danych jest domyślną bazą danych dla routingu połączenia z danymi. Aby wysłać dane do innej bazy danych, ustaw właściwość pozyskiwania danych „KustoDatabase” i skonfiguruj połączenie danych jako połączenie danych z wieloma bazami. Routing danych do innej bazy danych jest domyślnie wyłączony (niedozwolone). Ustawienie właściwości pozyskiwania bazy danych innej niż baza danych połączenia danych bez zezwalania na routing danych do wielu baz danych (ustawienie połączenia jako połączenie danych z wieloma bazami danych) spowoduje niepowodzenie pozyskiwania.

Aby uzyskać więcej informacji, zobacz przesyłanie obiektów 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>")));

Przekazywanie obiektów blob

Można utworzyć obiekt blob z pliku lokalnego, ustawić właściwości pozyskiwania danych w metadanych obiektu blob i przesłać go. Przykłady można znaleźć w temacie Używanie połączenia danych usługi Event Grid.

Uwaga

  • Zdecydowanie zalecamy używanie BlockBlob metody do generowania danych, ponieważ użycie AppendBlob może spowodować nieoczekiwane zachowanie.
  • Korzystanie z zestawu SDK usługi Azure Data Lake Gen2 wymaga użycia CreateFile do przesyłania plików oraz Flush na końcu, z parametrem close ustawionym na true. Aby uzyskać szczegółowy przykład poprawnego użycia zestawu SDK usługi Data Lake Gen2, zobacz Używanie połączenia danych usługi Event Grid.
  • Wyzwalanie pozyskiwania po operacji CopyBlob nie jest obsługiwane dla kont magazynu, które mają włączoną funkcję hierarchicznej przestrzeni nazw.
  • Gdy punkt końcowy centrum zdarzeń nie potwierdzi otrzymania zdarzenia, usługa Azure Event Grid aktywuje mechanizm ponawiania prób. Jeśli to ponowienie próby nie powiedzie się, usługa Event Grid może dostarczyć zdarzenia niedostarczone na konto magazynu przy użyciu procesu tworzenia utraconych komunikatów. Aby uzyskać więcej informacji, zobacz Dostarczanie komunikatów usługi Event Grid i ponawianie próby.
  • Używanie interfejsu API "OpenWrite" do zapisywania do obiektu blob nie jest zalecane, ponieważ powoduje powiadomienie o pustym obiekcie blob i błąd pustego obiektu blob. Ponadto opróżnij strumień tylko raz, aby zapobiec zduplikowanym powiadomieniom i wielokrotnemu pozyskiwaniu tego samego obiektu blob.
  • Usługa Azure Data Explorer próbuje odfiltrować zduplikowane powiadomienia dla tego samego obiektu blob wysyłane przez usługi nadrzędne, takie jak Event Grid lub Storage. Po wykryciu zduplikowanego zdarzenia pomija importowanie i rejestruje błąd BlobAlreadyReceived_DuplicateEventGridNotification, co oznacza, że blob jest już przetworzony.

Zmienianie nazwy obiektów blob

W przypadku używania usługi ADLSv2 można zmienić nazwę obiektu blob, aby uruchomić pozyskiwanie danych z obiektu blob do usługi Azure Data Explorer. Na przykład zobacz Zmienianie nazw obiektów blob.

Uwaga

  • Zmiana nazwy katalogu jest możliwa w usłudze ADLSv2, ale nie wyzwala zdarzeń zmiany nazwy obiektu blob ani pozyskiwania obiektów blob znajdujących się w katalogu. Aby pozyskiwać obiekty blob po zmianie ich nazw, bezpośrednio zmień nazwy żądanych obiektów blob.
  • Jeśli zdefiniowano filtry do śledzenia określonych podmiotów podczas tworzenia połączenia danych lub podczas ręcznego tworzenia zasobów usługi Event Grid, te filtry są stosowane w ścieżce pliku docelowego.

Usuwanie obiektów blob przy użyciu zasad cyklu życia pamięci masowej

Logika wbudowana w usługi Azure Data Explorer nie spowoduje usunięcia obiektów blob po ich zaimportowaniu. Użyj cyklu życia usługi Azure Blob Storage, aby zarządzać usuwaniem obiektów blob. Zaleca się przechowywanie obiektów blob przez od trzech do pięciu dni.

Znane problemy z usługą Event Grid

Praca bez uwierzytelniania lokalnego

Jeśli uwierzytelnianie lokalne jest wyłączone w przestrzeni nazw usługi Event Hubs zawierającej centrum zdarzeń używane do przesyłania strumieniowego powiadomień, wykonaj następujące kroki, aby upewnić się, że dane przepływa prawidłowo z magazynu do centrum zdarzeń przy użyciu tożsamości zarządzanych:

  1. Przypisz tożsamość zarządzaną przypisaną przez system do tematu systemowego usługi Event Grid dla konta magazynu. Aby uzyskać więcej informacji, zobacz Włącz tożsamość zarządzaną dla tematów systemowych.
  2. Udziel uprawnień nadawcy tożsamości zarządzanej, przypisując mu rolę Nadawca danych usługi Azure Event Hubs w centrum zdarzeń. Aby uzyskać więcej informacji, zobacz Dodawanie tożsamości do ról platformy Azure w miejscach docelowych.
  3. Upewnij się, że subskrypcja usługi Event Grid używa tożsamości zarządzanej do dostarczania zdarzeń. Aby uzyskać więcej informacji, zobacz Tworzenie subskrypcji zdarzeń przy użyciu tożsamości.

Ponadto skonfiguruj połączenie danych usługi Event Grid w celu korzystania z uwierzytelniania tożsamości zarządzanej, aby usługa Azure Data Explorer mogła odbierać powiadomienia z centrum zdarzeń.

Skonfiguruj pozyskiwanie danych usługi Event Grid dla plików wyeksportowanych z usługi Azure Data Explorer

Podczas używania usługi Azure Data Explorer do eksportowania plików używanych do pozyskiwania danych przez Event Grid należy pamiętać:

  • Powiadomienia usługi Event Grid nie są wyzwalane, jeśli ciąg połączenia podany dla polecenia eksportu lub ciąg połączenia podany dla tabeli zewnętrznej jest ciągiem połączenia w formacie ADLS Gen2 (na przykład abfss://filesystem@accountname.dfs.core.windows.net), ale dla konta magazynu nie włączono hierarchicznej przestrzeni nazw.
  • Jeśli konto nie ma włączonej hierarchicznej przestrzeni nazw, parametry połączenia muszą mieć format Blob Storage (na przykład https://accountname.blob.core.windows.net). Eksport działa zgodnie z oczekiwaniami nawet przy użyciu ciągu połączenia ADLS Gen2, ale powiadomienia nie zostaną wyzwolone, a pozyskiwanie danych przez usługę Event Grid nie będzie działać.

Emulowanie zdarzeń Storage z poziomu niestandardowych komponentów

W przypadku używania składników niestandardowych do emulowania zdarzeń usługi Azure Storage zdarzenia emulowane muszą być ściśle zgodne ze schematem zdarzeń usługi Azure Blob Storage, ponieważ usługa Azure Data Explorer odrzuci zdarzenia, których nie można przeanalizować za pomocą zestawu SDK usługi Event Grid.