Подключение к данным Сетки событий

Прием данных из Event Grid — это конвейер, который отслеживает события в Azure Storage и обновляет Azure Data Explorer, чтобы он извлекал данные при возникновении событий, на которые оформлена подписка. Azure Data Explorer поддерживает непрерывную загрузку данных из служба хранилища Azure (хранилище BLOB-объектов и ADLSv2) с подпиской Сетка событий Azure на уведомления о создании или переименовании BLOB-объектов и потоковой передачей этих уведомлений в Azure Data Explorer через Центры событий Azure.

Конвейер приема данных Центра событий проходит через несколько этапов. Вы создадите целевую таблицу в Azure Data Explorer, в которую будут приниматься данные в определенном формате. Затем вы создадите подключение к данным службы "Сетка событий Azure" в Azure Data Explorer. Для подключения к данным в Сетке событий необходимо указать сведения о маршрутизации событий, например таблицу для отправки данных и сопоставление таблиц. Вам также нужно указать свойства приема, которые описывают данные для приема, целевую таблицу и сопоставление. Вы можете создать пример данных и отправить BLOB-объекты или переименовать их, чтобы проверить подключение. Удалите BLOB-объекты после приема.

Приемом данных в Сетке событий можно управлять с помощью портала Azure, мастера приема, программно на C# или Python либо с помощью шаблона Azure Resource Manager.

Общие сведения о приеме данных в обозревателе данных Azure см. в разделе Обзор приема данных Azure Data Explorer.

Механизмы проверки подлинности подключения к данным сетки событий

  • Подключение к данным на основе управляемого удостоверения (рекомендуется): это наиболее безопасный способ подключения к источникам данных. Оно обеспечивает полный контроль над возможностью получения данных из источника данных.

    Для установки подключения к данным сетки событий с помощью управляемого удостоверения требуются следующие шаги и разрешения:

    1. Убедитесь, что у вас назначена роль в подписке Azure для учетной записи хранения исходных данных.
    2. Добавьте управляемый идентификатор в кластер.
    3. Предоставьте разрешения управляемому удостоверению в источнике данных. Чтобы получить данные из службы хранилища Azure, управляемое удостоверение должно иметь как минимум разрешения Storage Blob Data Reader для учетной записи служба хранилища Azure.
    4. Предоставьте разрешения управляемому удостоверению в концентраторе событий. Чтобы получать уведомления о BLOB-объектах из центра событий, управляемый идентификатор должен иметь разрешение Получатель данных Центров событий Azure для Центров событий Azure.
    5. Настройте политику управляемой идентификации для целевых баз данных.
    6. Создайте подключение к данным с использованием аутентификации управляемого удостоверения для получения данных.

    Примечание.

    • Группа потребителей концентратора событий должна быть уникальной для каждого потребителя. Создайте выделенную группу потребителей для каждого подключения к данным Azure Data Explorer.

    Внимание

    • Если разрешения управляемого удостоверения удаляются из источника данных, подключение к данным больше не будет работать и не сможет получить данные из источника данных.
    • Если в существующем пространстве имен Центров событий, где передаются уведомления о BLOB-объектах, отключена локальная проверка подлинности, необходимо использовать проверку подлинности с помощью управляемого удостоверения для подключения к данным и правильно настроить ресурсы. Дополнительные сведения см. в статье "Известные проблемы сетки событий".
  • Подключение к данным с проверкой подлинности на основе ключа: если для подключения к данным не указана проверка подлинности с помощью управляемого удостоверения, для подключения автоматически используется проверка подлинности на основе ключа. Подключения на основе ключей получают данные с помощью строки подключения к ресурсу, например строки подключения Центров событий Azure. Azure Data Explorer получает строку подключения к указанному ресурсу и безопасно сохраняет её. Затем строка подключения используется для получения данных из источника данных.

    Внимание

    Если ключ поворачивается, подключение к данным больше не будет работать и не сможет получить данные из источника данных. Чтобы устранить проблему, обновите или повторно создайте подключение к данным.

Формат данных

  • См. раздел Поддерживаемые форматы.
  • См. раздел Поддерживаемые сжатия.
    • Исходный размер несжатых данных должен быть указан в метаданных BLOB-объекта, иначе Azure Data Explorer оценит этот размер. Предельный несжатый размер файла при приеме данных составляет 6 ГБ.

      Примечание.

      Подписку на уведомления в службе "Сетка событий" можно настроить в учетных записях хранения Azure для BlobStorage, StorageV2 или Data Lake Storage 2-го поколения.

Свойства приема

Вы можете указать свойства приема данных большого двоичного объекта с помощью метаданных большого двоичного объекта. Можно задать следующие свойства:

Свойство Описание
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 Переопределяет время создания Extent для BLOB-объекта, в виде строки в формате ISO 8601. Используется для обратного заполнения.

Маршрутизация событий

При создании подключения к данным в кластере вы задаете маршрутизацию для отправки принимаемых данных. По умолчанию используется маршрутизация к целевой таблице, указанной в строке подключения, которая связана с целевой базой данных. Маршрутизация по умолчанию для данных также называется статической маршрутизацией. Вы также можете указать альтернативную маршрутизацию для данных с помощью свойств данных событий.

Маршрутизация данных событий в альтернативную базу данных

По умолчанию маршрутизация данных в альтернативную базу данных отключена. Чтобы отправить данные в другую базу данных, необходимо сначала настроить подключение в виде подключения к нескольким базам данных. Это можно сделать на портале Azure, с помощью C#, Python или шаблона ARM. Пользователь, группа, субъект-служба или управляемое удостоверение, используемые для поддержки маршрутизации базы данных, должны иметь по крайней мере роль участника и разрешения на запись в кластер. Дополнительные сведения см. в статье "Создание подключения к данным сетки событий" для Azure Data Explorer.

Чтобы указать альтернативную базу данных, задайте свойство приема базы данных.

Предупреждение

Указание альтернативной базы данных без настройки многобазового подключения к данным приводит к сбою процесса сбора данных.

Направьте данные событий в другую таблицу

При настройке подключения хранилища BLOB-объектов к кластеру Azure Data Explorer укажите свойства целевой таблицы:

  • Имя таблицы
  • формат данных;
  • картирование

Вы также можете указать свойства целевой таблицы для каждого BLOB-объекта, используя его метаданные. Данные будут динамически маршрутизироваться, как задано свойствами приема.

В примере ниже показано, как задать свойства приема данных в метаданных BLOB-объекта перед его отправкой. BLOB-данные распределяются по разным таблицам.

Кроме того, можно указать целевую базу данных. Подключение к данным в Сетке событий создается в контексте определенной базы данных. Поэтому эта база данных представляет маршрутизацию базы данных по умолчанию для подключения к данным. Чтобы отправить данные в другую базу данных, задайте свойство приема данных "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-объекта и передать его. Примеры см. в разделе "Использование подключения к данным сетки событий".

Примечание.

  • Мы настоятельно рекомендуем использовать BlockBlob для создания данных, так как использование AppendBlob может привести к неожиданному поведению.
  • При использовании пакета SDK для хранилища Azure Data Lake Gen2 необходимо использовать CreateFile для загрузки файлов и Flush в конце, задав параметр close значением true. Подробный пример правильного использования пакета SDK Озеро данных 2-го поколения см. в разделе "Использование подключения к данным сетки событий".
  • Активация приема после CopyBlob операции не поддерживается для учетных записей хранения, для которых включена функция иерархического пространства имен.
  • Если конечная точка концентратора событий не подтверждает получение события, служба "Сетка событий Azure" активирует механизм повтора. В случае сбоя повторной попытки доставки Сетка событий может доставить недоставленные события в учетную запись хранения, используя процесс перемещения в очередь. Дополнительные сведения см. в разделе Доставка и повторные попытки доставки сообщений сетки событий.
  • Использование API OpenWrite для записи в блоб не рекомендуется, так как оно активирует уведомление для пустого блоба и вызывает ошибку пустого блоба. Кроме того, очистите поток только один раз, чтобы предотвратить повторяющиеся уведомления и несколько приемов одного объекта BLOB.
  • Azure Data Explorer пытается отфильтровать повторяющиеся уведомления для одного и того же объекта BLOB, отправленного вышестоящими службами, такими как Event Grid или Storage. При обнаружении повторяющегося события он пропускает обработку данных и регистрирует ошибку BlobAlreadyReceived_DuplicateEventGridNotification, что означает, что BLOB уже обработан.

Переименование BLOB-объектов

При использовании ADLS 2-го поколения можно переименовать BLOB-объект, чтобы активировать прием BLOB-объектов в Azure Data Explorer. Например, см. раздел "Переименовать большие двоичные объекты".

Примечание.

  • Переименование каталогов возможно в ADLSv2, но при этом не активирует события blob renamed и приём BLOB-объектов в каталоге. Чтобы загрузить BLOB-объекты после переименования, просто переименуйте нужные BLOB-объекты.
  • Если вы определили фильтры для отслеживания определенных объектов при создании подключения к данным или при создании ресурсов Сетки событий вручную, эти фильтры применяются к пути к конечному файлу.

Удаление BLOB-объектов с помощью жизненного цикла хранилища

Встроенная логика в Azure Data Explorer не удаляет блобы после их загрузки. Для управления удалением BLOB-объектов используйте жизненный цикл хранилища BLOB-объектов Azure. Рекомендуется хранить BLOB-объекты от трех до пяти дней.

Известные проблемы с Сеткой событий

Работа без локальной проверки подлинности

Если локальная проверка подлинности отключена в пространстве имен Центров событий, которое содержит концентратор событий, используемый для потоковых уведомлений, выполните следующие действия, чтобы обеспечить правильность потоковой передачи данных из хранилища в концентратор событий с помощью управляемых удостоверений:

  1. Назначьте управляемое удостоверение, назначаемое системой, системной теме Event Grid для учетной записи хранения. Дополнительные сведения см. в разделе Включение управляемого идентификатора для системных разделов.
  2. Предоставьте управляемому удостоверению разрешения отправителя, назначив ему роль Центры событий Azure Data Sender для концентратора событий. Дополнительные сведения см. в статье "Добавление удостоверения в роли Azure" в местах назначения.
  3. Убедитесь, что подписка Event Grid использует управляемую идентификацию для доставки событий. Дополнительные сведения см. в разделе "Создание подписок на события" с использованием удостоверения.

Кроме того, настройте подключение к данным Event Grid для использования аутентификации с помощью управляемого удостоверения, чтобы Azure Data Explorer мог получать уведомления из центра событий.

Настройка приема данных Event Grid для файлов, экспортированных из Azure Data Explorer

При использовании Azure Data Explorer для экспорта файлов, используемых при приеме данных из Event Grid, обратите внимание на следующее:

  • Уведомления в службе "Сетка событий" не срабатывают, если строка подключения, указанная для команды экспорта, или строка подключения, предоставленная внешней таблице, является строкой подключения в формате ADLS 2-го поколения (например, abfss://filesystem@accountname.dfs.core.windows.net), но в учетной записи хранения не включено иерархическое пространство имен.
  • Если для учетной записи не включено иерархическое пространство имен, для строки подключения необходимо использовать формат Хранилище BLOB-объектов (например, https://accountname.blob.core.windows.net). Экспорт работает как ожидается даже при использовании строки подключения ADLS Gen2, но уведомления не будут отправляться, а прием данных через Event Grid не будет работать.

Эмуляция событий хранилища из пользовательских компонентов

При использовании пользовательских компонентов для эмулирования событий службы хранилища Azure эмулированные события должны строго соответствовать схеме событий хранилища BLOB-объектов Azure, так как Azure Data Explorer отбрасывает события, которые не могут быть проанализированы пакетом SDK сетки событий.