次の方法で共有


NLog シンクを使用して Azure Data Explorer にデータを取り込む

NLog は、.NET Standard を含むさまざまな .NET プラットフォーム向けの、柔軟で無料のログ記録プラットフォームです。 NLog を使用すると、データベース、ファイル、コンソールなど、複数のターゲットに書き込みを行うことができます。 NLog を使用すると、ログ記録の構成をオンザフライで変更できます。 NLog シンクは、ログ メッセージを KQL クラスターに送信できる NLog のターゲットです。 このプラグインは Azure-Kusto-Data ライブラリ上に構築され、ログをクラスターにシンクする効率的な方法を提供します。

この記事では、NLog シンクを使用してデータを取り込む方法について説明します。

データ コネクタの完全な一覧については、データ コネクタの概要に関する記事を参照してください。

前提条件

環境を設定する

このセクションでは、NLog コネクタを使用するように環境を準備します。

パッケージをインストールする

NLog.Azure.Kusto NuGet パッケージを追加します。 NuGet パッケージの名前を指定する Install-Package コマンドを使用します。

Install-Package NLog.Azure.Kusto

Microsoft Entra アプリの登録を作成する

Microsoft Entra アプリケーション認証は、ユーザーが存在せずにプラットフォームにアクセスする必要があるアプリケーションに使用されます。 NLog コネクタを使用してデータを取得するには、Microsoft Entra サービス プリンシパルを作成して登録し、このプリンシパルがデータベースからデータを取得することを承認する必要があります。

Microsoft Entra サービス プリンシパルは、次の例のように Azure portal またはプログラムを使用して作成できます。

このサービス プリンシパルは、Azure テーブルに書き込むためにコネクタによって利用される ID になります。 後で、Kusto リソースにアクセスするためのアクセス許可をこのサービス プリンシパルに付与します。

  1. Azure CLI 経由で Azure サブスクリプションにサインインします。 次に、ブラウザーで認証します。

    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 データから、appIdpassword、および tenant を後で使用のためにコピーします。

    {
      "appId": "1234abcd-e5f6-g7h8-i9j0-1234kl5678mn",
      "displayName": "my-service-principal",
      "name": "my-service-principal",
      "password": "1234abcd-e5f6-g7h8-i9j0-1234kl5678mn",
      "tenant": "1234abcd-e5f6-g7h8-i9j0-1234kl5678mn"
    }
    

Microsoft Entra アプリケーションとサービス プリンシパルが作成されました。

後の手順で使用する次の値を保存します。* アプリケーション (クライアント) ID * ディレクトリ (テナント) ID * クライアント シークレット キーの値

Microsoft Entra アプリにアクセス許可を付与する

  1. クエリ環境で、次の管理コマンドを、プレースホルダーを置き換えて実行します。 DatabaseName をターゲット データベースの名前に置き換え、ApplicationID を以前に保存した値に置き換えます。 このコマンドは、データベース インジェスター ロールをアプリに付与します。 詳細については、「データベース セキュリティ ロールの管理」を参照してください。

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

    Note

    最後のパラメーターは、データベースに関連付けられているロールに対してクエリを実行するときに、メモとして表示される文字列です。 詳細については、「既存のセキュリティ ロールを表示する」を参照してください。

テーブルとインジェストのマッピングを作成する

受信データのターゲット テーブルを作成します。

  • クエリ エディターで、次のテーブル作成コマンドを実行し、プレースホルダー 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 です。
    DATABASE 大文字と小文字が区別される、ターゲット データベースの名前。
    APP_ID 認証に必要なアプリケーション クライアント ID。 これは、「Microsoft Entra アプリの登録を作成する」で保存した値です。
    APP_KEY 認証に必要なアプリケーション キー。 Microsoft Entra アプリの登録の作成にこの値を保存しました。
    AZURE_TENANT_ID アプリケーションが登録されているテナントの 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. ターミナル内で samples フォルダーに移動し、次の dotnet コマンドを実行してアプリを実行します。

    dotnet run
    
  5. クエリ環境でターゲット データベースを選択し、次のクエリを実行して、取り込まれたデータを探索します。

    ADXNLogSample
    | take 10
    

    出力は、次の画像のようになります。

    take 10 関数と結果が含まれるテーブルのスクリーンショット