Прием данных с помощью приемника NLog в Azure Data Explorer

NLog — это гибкая и бесплатная платформа ведения журнала для различных платформ .NET, включая .NET standard. NLog позволяет записывать данные в несколько целевых объектов, таких как база данных, файл или консоль. С помощью NLog можно изменить конфигурацию ведения журнала во время полета. Приемник NLog — это целевой объект для NLog, который позволяет отправлять сообщения журнала в кластер KQL. Подключаемый модуль построен на основе библиотеки Azure-Kusto-Data и обеспечивает эффективный способ отправки ваших журналов в кластер.

В этой статье вы узнаете, как ингестировать данные с помощью приемника NLog.

Полный список соединителей данных см. в обзоре соединителей данных.

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

  • Пакет SDK для .NET версии 6.0 или более поздней версии
  • Кластер и база данных Azure Data Explorer

Настройка среды

В этом разделе описана подготовка среды к использованию соединителя NLog.

Установка пакета

Добавьте пакет NuGet NLog.Azure.Kusto. Используйте команду Install-Package, указывающую имя пакета NuGet.

Install-Package NLog.Azure.Kusto

Зарегистрируйте приложение Microsoft Entra

Проверка подлинности приложения Microsoft Entra используется для приложений, которым требуется доступ к платформе без присутствующих пользователей. Чтобы получить данные с помощью соединителя NLog, необходимо создать и зарегистрировать учетную запись службы Microsoft Entra, а затем предоставить ей права на получение данных из базы данных.

Принципал службы Microsoft Entra можно создать через портал Azure или программно, как показано в следующем примере.

Эта учетная запись службы будет идентификацией, используемой соединителем для записи данных в вашу таблицу в Kusto. Позже вы предоставьте этому субъекту-службе разрешения для доступа к ресурсам Kusto.

  1. Войдите в подписку Azure с помощью Azure CLI. Затем авторизуйтесь в браузере.

    az login
    
  2. Выберите подписку для хостинга принципала. Этот шаг необходим, если у вас несколько подписок.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Создайте субъект-службу. В этом примере принципал службы называется my-service-principal.

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. Из возвращаемых данных JSON скопируйте appId, password и tenant для дальнейшего использования.

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "displayName": "my-service-principal",
      "name": "my-service-principal",
      "password": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "tenant": "00001111-aaaa-2222-bbbb-3333cccc4444"
    }
    

Вы создали приложение Microsoft Entra и сервисный принципал.

Сохраните следующие значения, которые будут использоваться в последующих шагах: * Идентификатор приложения (клиента) * идентификатор каталога (клиента) * значение ключа секрета клиента

Предоставление разрешений приложения Microsoft Entra

  1. В среде запроса выполните следующую команду администрирования, заменив заполнители. Замените DatabaseName именем целевой базы данных и ApplicationID ранее сохраненным значением. Эта команда предоставляет приложению роль ingestor базы данных. Дополнительные сведения см. в разделе "Управление ролями безопасности базы данных".

    .add database <DatabaseName> ingestors ('aadapp=<ApplicationID>') 'NLOG Azure App Registration role'
    

    Примечание.

    Последний параметр — это строка, которая отображается в виде примечаний при запросе ролей, связанных с базой данных. Дополнительные сведения см. в разделе "Просмотр существующих ролей безопасности".

Создание таблицы и сопоставления загрузки

Создайте целевую таблицу для входящих данных.

  • В редакторе запросов выполните следующую команду создания таблицы, заменив заполнитель TableName именем целевой таблицы:

    .create table <TableName> (Timestamp:datetime, Level:string, Message:string, FormattedMessage:dynamic, Exception:string, Properties:dynamic)
    

Добавление целевой конфигурации в приложение

Выполните следующие действия.

  • Добавьте целевую конфигурацию
  • Сборка и запуск приложения
  1. Добавьте целевой объект в файл конфигурации NLog.

    <targets>
        <target name="targettable" xsi:type="TargetTable"
        IngestionEndpointUri="<Connection string>"
        Database="<Database name>"
        TableName="<Table name>"
        ApplicationClientId="<Entra App clientId>"
        ApplicationKey="<Entra App key>"
        Authority="<Entra tenant id>"
        />
    </targets>
    
    ##Rules
    <rules>
        <logger name="*" minlevel="Info" writeTo="adxtarget" />
    </rules>
    

    Дополнительные сведения см. в разделе "Соединитель Nlog".

  2. Отправка данных с помощью приемника NLog. Например:

    logger.Info("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    logger.Error(exceptionObj, "This was exception");
    logger.Debug("Processed {@Position} in {Elapsed:000} ms. ", position, elapsedMs);
    logger.Warn("Processed {@Position} in {Elapsed:000} ms. ", position, elapsedMs);
    
  3. Выполните сборку и запустите приложение. Например, если вы используете Visual Studio, нажмите клавишу F5.

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

    <TableName>
    | take 10
    

Запуск примера приложения

Используйте пример приложения генератора журналов в качестве примера, в котором показано, как настроить и использовать приемник NLog.

  1. Клонируйте репозиторий Git приемника NLog с помощью следующей команды Git:

    git clone https://github.com/Azure/azure-kusto-nlog-sink.git
    
  2. Задайте следующие переменные среды, чтобы файл конфигурации NLog сразу же считывал их из среды:

    «Переменная» Описание
    INGEST_ENDPOINT URI приема для целевого объекта данных. Вы скопировали этот URI в рамках предварительных условий.
    БАЗА ДАННЫХ Имя целевой базы данных с учетом регистра.
    APP_ID Идентификатор клиента приложения, необходимый для проверки подлинности. Это значение сохранено в разделе "Создание регистрации приложения Microsoft Entra".
    APP_KEY Ключ приложения, необходимый для проверки подлинности. Это значение сохранено в разделе "Создание регистрации приложения Microsoft Entra".
    AZURE_TENANT_ID Идентификатор клиента, в котором зарегистрировано приложение. Это значение сохранено в разделе "Создание регистрации приложения Microsoft Entra".

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

    $env:INGEST_ENDPOINT="<ingestionURI>"
    $env:APP_ID="<appId>"
    $env:APP_KEY="<appKey>"
    $env:AZURE_TENANT_ID="<tenant>"
    $env:DATABASE="<databaseName>"
    
  3. В терминале перейдите в корневую папку клонированного репозитория и выполните следующую dotnet команду, чтобы создать приложение:

    cd .\NLog.Azure.Kusto.Samples\
    dotnet build
    
  4. В терминале перейдите в папку примеров и выполните следующую dotnet команду, чтобы запустить приложение:

    dotnet run
    
  5. В среде запроса выберите нужную базу данных и выполните следующий запрос, чтобы изучить загруженные данные.

    ADXNLogSample
    | take 10