Создание подключения к данным концентратора событий для Azure Data Explorer с помощью C#

Обозреватель данных Azure — это быстрая и высокомасштабируемая служба для изучения данных журналов и телеметрии. Azure Data Explorer позволяет принимать (загружать) данные из Центров событий, Центра Интернета вещей и больших двоичных объектов, записанных в контейнеры больших двоичных объектов.

В этой статье вы создадите подключение к данным концентратора событий для Azure Data Explorer с помощью C#.

Предварительные условия

Установка пакета NuGet для C#

Аутентификация

Для выполнения приведенного ниже примера вам потребуется приложение Azure Active Directory (Azure AD) и субъект-служба с доступом к ресурсам. Чтобы создать бесплатное приложение Azure AD и добавить назначение ролей на уровне подписки, см. сведения о создании приложения Azure AD. Вам также потребуется идентификатор каталога (клиента), идентификатор приложения и секрет клиента.

Добавление подключения к данным Концентратора событий

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

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Application ID
var clientSecret = "xxxxxxxxxxxxxx";//Client Secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var authenticationContext = new AuthenticationContext($"https://login.windows.net/{tenantId}");
var credential = new ClientCredential(clientId, clientSecret);
var result = await authenticationContext.AcquireTokenAsync(resource: "https://management.core.windows.net/", clientCredential: credential);

var credentials = new TokenCredentials(result.AccessToken, result.AccessTokenType);

var kustoManagementClient = new KustoManagementClient(credentials)
{
    SubscriptionId = subscriptionId
};

var resourceGroupName = "testrg";
//The cluster and database that are created as part of the Prerequisites
var clusterName = "mykustocluster";
var databaseName = "mykustodatabase";
var dataConnectionName = "myeventhubconnect";
//The event hub that is created as part of the Prerequisites
var eventHubResourceId = "/subscriptions/xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx/resourceGroups/xxxxxx/providers/Microsoft.EventHub/namespaces/xxxxxx/eventhubs/xxxxxx";
var consumerGroup = "$Default";
var location = "Central US";
//The table and column mapping are created as part of the Prerequisites
var tableName = "StormEvents";
var mappingRuleName = "StormEvents_CSV_Mapping";
var dataFormat = DataFormat.CSV;
var compression = "None";
await kustoManagementClient.DataConnections.CreateOrUpdateAsync(resourceGroupName, clusterName, databaseName, dataConnectionName, 
    new EventHubDataConnection(eventHubResourceId, consumerGroup, location: location, tableName: tableName, mappingRuleName: mappingRuleName, dataFormat: dataFormat, compression: compression));
Параметр Рекомендуемое значение Описание поля
tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Идентификатор клиента. Также известен как идентификатор каталога.
subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Идентификатор подписки, используемой для создания ресурсов.
clientid xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Идентификатор клиента приложения, которое имеет доступ к ресурсам в клиенте.
clientSecret xxxxxxxxxxxxxx Секрет клиента приложения, которое имеет доступ к ресурсам в клиенте.
имя_группы_ресурсов testrg Имя группы ресурсов, содержащей ваш кластер.
clusterName mykustocluster Имя вашего кластера.
databaseName mykustodatabase Имя целевой базы данных в вашем кластере.
dataConnectionName myeventhubconnect Необходимое имя вашего подключения для передачи данных.
tableName StormEvents Имя целевой таблицы в целевой базе данных.
mappingRuleName StormEvents_CSV_Mapping Имя сопоставления столбцов, связанного с целевой таблицей.
dataFormat csv Формат данных сообщения.
eventHubResourceId Идентификатор ресурса Идентификатор ресурса вашего концентратора событий, в котором хранятся данные для приема.
consumerGroup $Default Группа потребителей вашего Концентратора событий.
location Центральная часть США Расположение ресурса подключения к данным.
compression Gzip или None Тип сжатия данных.

Создание данных

См. пример приложения, которое генерирует данные и отправляет их в концентратор событий.

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

var events = new List<EventData>();
var data = string.Empty;
var recordsPerEvent = 5;
var rand = new Random();
var counter = 0;

for (var i = 0; i < 10; i++)
{
    // Create the data
    var metric = new Metric { Timestamp = DateTime.UtcNow, MetricName = "Temperature", Value = rand.Next(-30, 50) }; 
    var data += JsonConvert.SerializeObject(metric) + Environment.NewLine;
    counter++;

    // Create the event
    if (counter == recordsPerEvent)
    {
        var eventData = new EventData(Encoding.UTF8.GetBytes(data));
        events.Add(eventData);

        counter = 0;
        data = string.Empty;
    }
}

// Send events
eventHubClient.SendAsync(events).Wait();

Очистка ресурсов

Чтобы удалить подключение к данным, используйте следующую команду:

kustoManagementClient.DataConnections.Delete(resourceGroupName, clusterName, databaseName, dataConnectionName);