NLog シンクを使用して Azure Data Explorer にデータを取り込む
NLog は、.NET Standard を含むさまざまな .NET プラットフォーム向けの、柔軟で無料のログ記録プラットフォームです。 NLog を使用すると、データベース、ファイル、コンソールなど、複数のターゲットに書き込みを行うことができます。 NLog を使用すると、ログ記録の構成をオンザフライで変更できます。 NLog シンクは、ログ メッセージを KQL クラスターに送信できる NLog のターゲットです。 このプラグインは Azure-Kusto-Data ライブラリ上に構築され、ログをクラスターにシンクする効率的な方法を提供します。
この記事では、NLog シンクを使用してデータを取り込む方法について説明します。
データ コネクタの完全な一覧については、データ コネクタの概要に関する記事を参照してください。
前提条件
- .NET SDK 6.0 以降
- Azure Data Explorer クラスターとデータベース
環境を設定する
このセクションでは、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 リソースにアクセスするためのアクセス許可をこのサービス プリンシパルに付与します。
Azure CLI 経由で Azure サブスクリプションにサインインします。 次に、ブラウザーで認証します。
az login
プリンシパルをホストするサブスクリプションを選択します。 この手順は、複数のサブスクリプションがある場合に必要です。
az account set --subscription YOUR_SUBSCRIPTION_GUID
サービス プリンシパルを作成します。 この例では、サービス プリンシパルを
my-service-principal
と呼びます。az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
返された 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 アプリケーションとサービス プリンシパルが作成されました。
後の手順で使用する次の値を保存します。* アプリケーション (クライアント) ID * ディレクトリ (テナント) ID * クライアント シークレット キーの値
Microsoft Entra アプリにアクセス許可を付与する
クエリ環境で、次の管理コマンドを、プレースホルダーを置き換えて実行します。 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)
ターゲット構成をアプリに追加する
次の手順を使用して、以下を行います:
- ターゲット構成を追加する
- アプリをビルドして実行する
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 コネクタを参照してください。
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);
アプリをビルドし、実行します。 たとえば、Visual Studio を使用している場合は、F5 キーを押します。
データがクラスター内にあることを確認します。 クエリ環境で、プレースホルダーを、先ほど使用したテーブルの名前に置き換えて、次のクエリを実行します。
<TableName> | take 10
サンプル アプリを実行する
NLog シンクを構成して使用する方法を示す例として、サンプルのログ ジェネレーター アプリを使用します。
次の git コマンドを使用して、NLog シンクの git リポジトリを複製します。
git clone https://github.com/Azure/azure-kusto-nlog-sink.git
NLog 構成ファイルが環境からすぐに読み取ることができるように、次の環境変数を設定します。
変数 説明 INGEST_ENDPOINT データ ターゲットの取り込み URI。 これは、前提条件でコピーした URI です。 DATABASE 大文字と小文字が区別される、ターゲット データベースの名前。 APP_ID 認証に必要なアプリケーション クライアント ID。 これは、「Microsoft Entra アプリの登録を作成する」で保存した値です。 APP_KEY 認証に必要なアプリケーション キー。 Microsoft Entra アプリの登録の作成にこの値を保存しました。 AZURE_TENANT_ID アプリケーションが登録されているテナントの ID。 Microsoft Entra アプリの登録の作成にこの値を保存しました。 環境変数は、手動で設定するか、次のコマンドを使用して設定できます。
ターミナル内で、複製したリポジトリのルート フォルダーに移動し、次の
dotnet
コマンドを実行してアプリをビルドします。cd .\NLog.Azure.Kusto.Samples\ dotnet build
ターミナル内で samples フォルダーに移動し、次の
dotnet
コマンドを実行してアプリを実行します。dotnet run
クエリ環境でターゲット データベースを選択し、次のクエリを実行して、取り込まれたデータを探索します。
ADXNLogSample | take 10
出力は、次の画像のようになります。