Руководство по переносу полученных данных центров событий из служба хранилища Azure в Azure Synapse Analytics с помощью Сетка событий Azure и Функции Azure

В этом руководстве вы перенесете данные центров событий из Хранилище BLOB-объектов Azure в Azure Synapse Analytics, в частности выделенный пул SQL, используя Сетка событий Azure и Функции Azure.

Application overview

Эта схема демонстрирует рабочий процесс решения, создаваемого в рамках этого руководства.

  1. Данные, отправляемые в концентратор событий Azure, записываются в хранилище BLOB-объектов Azure.
  2. После сбора данных создается событие и отправляется в Сетку событий Azure.
  3. Сетка событий Azure переадресовывает данные этого события в приложение-функцию Azure.
  4. Приложение-функция использует URL-адрес большого двоичного объекта из данных события, чтобы извлечь большой двоичный объект из хранилища.
  5. Приложение-функция переносит данные больших двоичных объектов в Azure Synapse Analytics.

Ниже перечислены действия, которые вы выполните в этой статье.

  • Развертывание необходимой инфраструктуры для работы с руководством.
  • Публикация кода в приложение-функцию.
  • Создание подписки Сетки событий
  • Потоковая передача примера данных в Центры событий.
  • Проверка собранных данных в Azure Synapse Analytics

Необходимые компоненты

Для работы с этим руководством требуется:

  • В этой статье предполагается, что вы знакомы с сеткой событий и Центрами событий (особенно функцией захвата). Если вы не знакомы с Сетка событий Azure, ознакомьтесь с Сетка событий Azure. Дополнительные сведения о функции отслеживания Центры событий Azure см. в разделе "Запись событий" Центры событий Azure Хранилище BLOB-объектов Azure или Azure Data Lake служба хранилища.
  • Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
  • Visual Studio с рабочими нагрузками для разработки классических приложений .NET, Azure, ASP.NET, Node.js, Python и веб-разработки.
  • Скачать на свой компьютер пример проекта EventHubsCaptureEventGridDemo.
    • WindTurbineDataGenerator — простой издатель, который отправляет примеры данных ветряной турбины в концентратор событий с включенной функцией захвата.
    • FunctionDWDumper — функция Azure, получающая уведомление от Сетка событий Azure при захвате файла Avro в большой двоичный объект служба хранилища Azure. Она получает путь URI для большого двоичного объекта, считывает его содержимое и помещает эти данные в Azure Synapse Analytics (выделенный пул SQL).

Развертывание инфраструктуры

На этом шаге вы развернете необходимую инфраструктуру с помощью шаблона Resource Manager. При развертывании шаблона создаются следующие ресурсы.

  • Концентратор событий со включенной функцией "Сбор".
  • Учетная запись хранения для собранных файлов.
  • План службы приложений для размещения приложения-функции.
  • Приложение-функция для обработки события.
  • SQL Server для размещения хранилища данных.
  • Azure Synapse Analytics (выделенный пул SQL) для хранения перенесенных данных.

Использование Azure CLI для развертывания инфраструктуры

  1. Войдите на портал Azure.

  2. Нажмите кнопку Cloud Shell, которая находится вверху.

    Screenshot of Azure portal showing the selection of Cloud Shell button.

  3. В нижней части окна веб-браузера вы увидите открытый Cloud Shell.

    1. Если вы впервые используете Cloud Shell:
      1. Если у вас будет выбор между Bash и PowerShell, выберите Bash.

      2. Создайте учетную запись хранения, выбрав Создать хранилище. Azure Cloud Shell требуется учетная запись хранилища Azure для хранения некоторых файлов.

        Screenshot showing the creation of storage for Cloud Shell.

      3. Подождите, пока не инициализируется Cloud Shell.

        Screenshot showing the Cloud Shell initialized.

  4. В Cloud Shell выберите Bash, как показано на рисунке выше, если этот параметр еще не выбран.

  5. Создайте группу ресурсов Azure, выполнив следующую команду в окне CLI:

    1. Скопируйте следующую команду и вставьте ее в окно Cloud Shell. При желании измените имя группы ресурсов и расположение.

      az group create -l eastus -n rgDataMigration
      
    2. Нажмите клавишу ВВОД.

      Приведем пример:

      user@Azure:~$ az group create -l eastus -n rgDataMigration
      {
        "id": "/subscriptions/00000000-0000-0000-0000-0000000000000/resourceGroups/rgDataMigration",
        "location": "eastus",
        "managedBy": null,
        "name": "rgDataMigration",
        "properties": {
          "provisioningState": "Succeeded"
        },
        "tags": null
      }
      
  6. Разверните все ресурсы, упомянутые в предыдущем разделе (концентратор событий, учетная запись хранения, приложение-функция, Azure Synapse Analytics), выполнив следующую команду интерфейса командной строки:

    1. Скопируйте эту команду и вставьте ее в окно Cloud Shell. Кроме того, вы можете скопировать или вставить в редактор выбранного редактора значения, задать значения, а затем скопировать команду в Cloud Shell. Если вы видите ошибку из-за имени ресурса Azure, удалите группу ресурсов, исправьте имя и повторите команду.

      Внимание

      Перед выполнением этой команды укажите значения для следующих сущностей:

      • Имя группы ресурсов, созданной ранее.
      • Название пространства имен концентратора событий.
      • Имя концентратора событий. Вы можете оставить имеющееся значение (hubdatamigration).
      • Имя для SQL Server.
      • Имя и пароль пользователя SQL.
      • Имя базы данных.
      • Имя учетной записи хранения
      • Имя приложения-функции.
      az deployment group create \
          --resource-group rgDataMigration \
          --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/event-grid/EventHubsDataMigration.json \
          --parameters eventHubNamespaceName=<event-hub-namespace> eventHubName=hubdatamigration sqlServerName=<sql-server-name> sqlServerUserName=<user-name> sqlServerPassword=<password> sqlServerDatabaseName=<database-name> storageName=<unique-storage-name> functionAppName=<app-name>
      
    2. Нажмите клавишу ВВОД в окне Cloud Shell, чтобы запустить команду. Этот процесс может занять некоторое время, так как вы создаете кучу ресурсов. После выполнения команды убедитесь, что сбоев не было.

  7. Закройте Cloud Shell, нажав кнопку Cloud Shell на портале или кнопку X в правом верхнем углу окна Cloud Shell.

Проверка создания ресурсов

  1. На портале Azure в меню слева выберите Группы ресурсов.

  2. Отфильтруйте список групп ресурсов, введя имя нужной группы ресурсов в поле поиска.

  3. Выберите в списке свою группу ресурсов.

    Screenshot showing the selection of your resource group.

  4. Убедитесь, что в группе ресурсов находятся следующие ресурсы:

    Screenshot showing resources in the resource group.

Создание таблицы в Azure Synapse Analytics

В этом разделе вы создадите таблицу в выделенном пуле SQL, созданном ранее.

  1. В списке ресурсов в группе ресурсов выберите свой выделенный пул SQL.

  2. На странице Выделенный пул SQL в разделе Типичные задачи в меню слева выберите Редактор запросов (предварительная версия).

    Screenshot showing the selection of Query Editor on a Dedicated SQL pool page in the Azure portal.

  3. Введите имя пользователя и пароль для SQL Server и щелкните ОК. Если появится сообщение о том, что клиент может получить доступ к СЕРВЕРУ SQL Server, выберите "Разрешить IP-адрес>" <на сервере <SQL Server> и нажмите кнопку "ОК".

  4. Скопируйте и вставьте следующий код в окно запроса:

    CREATE TABLE [dbo].[Fact_WindTurbineMetrics] (
        [DeviceId] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MeasureTime] datetime NULL,
        [GeneratedPower] float NULL,
        [WindSpeed] float NULL,
        [TurbineSpeed] float NULL
    )
    WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN);
    

    Screenshot showing the query editor.

  5. Не закрывайте эту вкладку или окно, так как в конце руководства это поможет вам проверить успешность создания данных.

Публикация приложения службы "Функции Azure"

Сначала получите профиль публикации для приложения-функции на портале Azure. Затем используйте профиль публикации для публикации проекта или приложения службы "Функции Azure" из Visual Studio.

Скачать профиль публикации

  1. На странице Группа ресурсов выберите приложение службы "Функции Azure" в списке ресурсов.

    Screenshot showing the selection of the function app in the list of resources for a resource group.

  2. На странице Приложение-функция выберите Получить профиль публикации на панели команд.

    Screenshot showing the selection of the **Get Publish Profile** button on the command bar of the function app page.

  3. Загрузите и сохраните файл во вложенную папку FunctionEGDDumper в папке EventHubsCaptureEventGridDemo.

Использование профиля публикации для публикации приложения службы "Функции Azure"

  1. Запустите Visual Studio.

  2. Откройте решение EventHubsCaptureEventGridDemo.sln, скачанное с портала GitHub во время выполнения предыдущих шагов. Его можно найти в папке /samples/e2e/EventHubsCaptureEventGridDemo.

  3. В обозревателе решений щелкните правой кнопкой мыши проект FunctionEGDWDumper и выберите Публиковать.

  4. На следующем экране выберите Пуск или Добавить профиль публикации.

  5. В диалоговом окне Публикация выберите значение Импорт профиля для параметра Целевой объект и нажмите Далее.

    Screenshot showing the selection **Import Profile** on the **Publish** dialog box.

  6. На вкладке Импорт профиля выберите файл параметров публикации, сохраненный ранее в папке FunctionEGDWDumper, и нажмите кнопку Готово.

  7. После настройки профиля в Visual Studio выберите Публиковать. Убедитесь, что публикация прошла успешно.

  8. В веб-браузере с открытой страницей "Функция Azure" выберите "Функции " в средней области. Убедитесь, что в списке отображается функция EventGridTriggerMigrateData. Если вы не видите ее, попробуйте повторить публикацию из Visual Studio и обновите страницу на портале.

    Screenshot showing the confirmation of function creation.

После публикации функции вы можете подписаться на событие.

Настройте подписку на событие

  1. На новой вкладке или новом окне веб-браузера войдите в портал Azure.

  2. На портале Azure в меню слева выберите Группы ресурсов.

  3. Отфильтруйте список групп ресурсов, введя имя нужной группы ресурсов в поле поиска.

  4. Выберите в списке свою группу ресурсов.

  5. Выберите Пространство имен Центров событий из списка ресурсов.

  6. На странице Пространство имен Центров событий выберите События в меню слева, а затем на панели инструментов выберите + Подписка на события.

    Screenshot of the Events page for an Event Hubs namespace with Add event subscription link selected.

  7. На странице Создать подписку на событие выполните следующие действия:

    1. Укажите имя для подписки на событие.

    2. Введите имя для системного раздела. Системный раздел предоставляет конечную точку, через которую отправитель может отправлять события. Дополнительные сведения см. в описании системных разделов.

    3. В поле Тип конечной точки выберите Функция Azure.

    4. В разделе Конечная точка щелкните ссылку.

    5. На странице Выберите функцию Azure выполните следующие действия, если поля не заполнены автоматически:

      1. Выберите подписку Azure, в которой размещена функция Azure.
      2. Выберите группу ресурсов для этой функции.
      3. Выберите приложение-функцию.
      4. Выберите слот развертывания.
      5. Выберите функцию EventGridTriggerMigrateData.
    6. На странице Выберите функцию Azure щелкните Подтвердить выбор.

    7. Теперь вернитесь на страницу Создать подписку на события и щелкните Создать.

      Screenshot of the Create an event subscription page.

  8. Убедитесь, что подписка на событие успешно создана. Перейдите на вкладку Подписки на события на странице События для пространства имен Центров событий.

    Screenshot showing the Event Subscriptions tab on the Events page.

Запуск приложения для создания данных

Итак, вы завершили настройку концентратора событий, выделенного пула SQL (прежнее название — Хранилище данных SQL), приложения-функции Azure и подписки на события. Прежде чем запустить приложение, создающее данные для концентратора событий, настройте несколько значений.

  1. На портале Azure, как и раньше, перейдите к группе ресурсов.

  2. Выберите пространство имен Центров событий.

  3. На странице пространства имен Центров событий выберите Политики общего доступа в меню слева.

  4. В списке политик выберите RootManageSharedAccessKey.

    Screenshot showing the Shared access policies page for an Event Hubs namespace.

  5. Щелкните синюю кнопку копирования справа от текстового поля Connection string-primary key (Первичный ключ строки подключения).

  6. Вернитесь к решению Visual Studio.

  7. Щелкните правой кнопкой мыши проект WindTurbineDataGenerator и выберите Назначить запускаемым проектом.

  8. В проекте WindTurbineDataGenerator откройте файл program.cs.

  9. Замените <EVENT HUBS NAMESPACE CONNECTION STRING> строкой подключения, которую вы скопировали на портале.

  10. Если вы использовали другое имя для концентратора событий вместо hubdatamigration, замените <EVENT HUB NAME> на имя концентратора событий.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. Постройте решение. Запустите приложение WindTurbineGenerator.exe.

  12. Через пару минут на другой вкладке браузера, где открыто окно запросов, выполните запрос по перенесенным данным в таблице хранилища данных.

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    Screenshot showing the query results.

Мониторинг решения

Этот раздел поможет вам выполнять мониторинг и устранение неполадок для решения.

Просмотр собранных данных в учетной записи хранения

  1. Перейдите к группе ресурсов и выберите учетную запись хранения, которая используется для сбора данных о событиях.

  2. На странице учетной записи служба хранилища выберите браузер служба хранилища в меню слева.

  3. Разверните раздел Контейнеры BLOB-объектов и выберите windturbinecapture.

  4. Откройте в области справа папку с таким же именем, как у пространства имен Центров событий.

  5. Откройте папку с таким же именем, как у концентратора событий (hubdatamigration).

  6. Просмотрите вложенные папки и найдите файлы AVRO. Приведем пример:

    Screenshot showing the captured file in the storage.

Проверка того, что триггер Сетки событий вызвал функцию

  1. Перейдите к используемой группе ресурсов и выберите приложение-функцию.

  2. Перейдите на вкладку "Функции" на средней панели.

  3. В списке выберите функцию EventGridTriggerMigrateData.

  4. На странице Функция выберите в меню слева пункт Монитор.

  5. Выберите Настроить, чтобы настроить сбор журналов вызовов в Application Insights.

  6. Создайте новый ресурс Application Insights или выберите существующий.

  7. Вернитесь на страницу Монитор для этой функции.

  8. Убедитесь, что клиентское приложение (WindTurbineDataGenerator), отправляющее события, по-прежнему выполняется. Если это не так, запустите это приложение.

  9. Подождите несколько минут (5 и более), а затем нажмите кнопку Обновить, чтобы просмотреть вызовы функций.

    Screenshot showing the Function invocations.

  10. Выберите конкретный вызов, чтобы просмотреть сведения о нем.

    Служба "Сетка событий" распределяет данные события между подписчиками. В следующем примере показаны данные событий, сгенерированные при записи потока данных, проходящих через концентратор событий, в большой двоичный объект. В частности, обратите внимание, что свойство fileUrl в объекте data указывает на большой двоичный объект в хранилище. Приложение-функция использует этот URL-адрес для получения файла большого двоичного объекта с записанными данными.

    {
      "topic": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/rgDataMigration/providers/Microsoft.EventHub/namespaces/spehubns1207",
      "subject": "hubdatamigration",
      "eventType": "Microsoft.EventHub.CaptureFileCreated",
      "id": "4538f1a5-02d8-4b40-9f20-36301ac976ba",
      "data": {
        "fileUrl": "https://spehubstorage1207.blob.core.windows.net/windturbinecapture/spehubns1207/hubdatamigration/0/2020/12/07/21/49/12.avro",
        "fileType": "AzureBlockBlob",
        "partitionId": "0",
        "sizeInBytes": 473444,
        "eventCount": 2800,
        "firstSequenceNumber": 55500,
        "lastSequenceNumber": 58299,
        "firstEnqueueTime": "2020-12-07T21:49:12.556Z",
        "lastEnqueueTime": "2020-12-07T21:50:11.534Z"
      },
      "dataVersion": "1",
      "metadataVersion": "1",
      "eventTime": "2020-12-07T21:50:12.7065524Z"
    }
    

Проверка того, что данные успешно сохранены в выделенном пуле SQL

На вкладке браузера, где открыто окно запросов, выполните запрос по перенесенным данным в таблице выделенного пула SQL.

Screenshot showing the final query results.

Следующие шаги