NLog 싱크를 사용하여 Azure Data Explorer로 데이터 수집
NLog는 .NET 표준을 포함한 다양한 .NET 플랫폼을 위한 유연성 있는 무료 로깅 플랫폼입니다. NLog를 사용하면 데이터베이스, 파일 또는 콘솔과 같은 여러 대상에 쓸 수 있습니다. NLog를 사용하면 즉시 로깅 구성을 변경할 수 있습니다. NLog 싱크는 로그 메시지를 KQL 클러스터로 보낼 수 있는 NLog의 대상입니다. 플러그 인은 Azure-Kusto-Data 라이브러리 위에 빌드되며 클러스터에 로그를 싱크하는 효율적인 방법을 제공합니다.
이 문서에서는 nLog 싱크를 사용하여 데이터를 수집하는 방법을 알아봅니다.
데이터 커넥터의 전체 목록은 데이터 커넥터 개요를 참조하세요.
필수 조건
- .NET SDK 6.0 이상
- Azure Data Explorer 클러스터 및 데이터베이스
환경 설정
이 섹션에서는 NLog 커넥터를 사용하도록 환경을 준비합니다.
패키지 설치
NLog.Azure.Kusto NuGet 패키지를 추가합니다. Install-Package 명령을 사용합니다. 이때 NuGet 패키지의 이름을 지정합니다.
Install-Package NLog.Azure.Kusto
Microsoft Entra 앱 등록 만들기
Microsoft Entra 애플리케이션 인증은 사용자 없이 플랫폼에 액세스해야 하는 애플리케이션에 사용됩니다. NLog 커넥터를 사용하여 데이터를 가져오려면 Microsoft Entra 서비스 주체를 만들고 등록한 다음, 데이터베이스에서 데이터를 가져오도록 이 보안 주체에 권한을 부여해야 합니다.
Microsoft Entra 서비스 주체는 다음 예제와 같이 Azure Portal을 통하거나 프로그래밍 방식으로 만들 수 있습니다.
이 서비스 주체는 Kusto의 테이블에 데이터를 쓰기 위해 커넥터에서 사용하는 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'
참고 항목
마지막 매개 변수는 데이터베이스와 연결된 역할을 쿼리할 때 메모로 표시되는 문자열입니다. 자세한 내용은 기존 보안 역할 보기를 참조하세요.
테이블 및 수집 매핑 만들기
들어오는 데이터에 대한 대상 테이블을 만듭니다.
쿼리 편집기에서 다음 테이블 만들기 명령을 실행합니다. 이때 자리 표시자 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
터미널 내에서 샘플 폴더로 이동하고 다음
dotnet
명령을 실행하여 앱을 실행합니다.dotnet run
쿼리 환경에서 대상 데이터베이스를 선택하고 다음 쿼리를 실행하여 수집된 데이터를 탐색합니다.
ADXNLogSample | take 10
출력은 다음 이미지와 비슷합니다.