

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# NLog를 사용하여 Amazon CloudWatch Logs에서.NET 애플리케이션에 대한 로깅 구성
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog"></a>

*Bibhuti Sahu, Rob Hill(AWS), Amazon Web Services*

## 요약
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-summary"></a>

이 패턴은 NLog 오픈 소스 로깅 프레임워크를 사용하여 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)에 .NET 애플리케이션 사용 및 이벤트를 기록하는 방법을 설명합니다. CloudWatch 콘솔에서 거의 실시간으로 애플리케이션의 로그 메시지를 볼 수 있습니다. 또한 [지표](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)를 설정하고 지표 임계값이 초과될 경우 알리도록 [경보](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html)를 구성할 수 있습니다. CloudWatch Application Insights를 사용하면 모니터링되는 애플리케이션의 잠재적 문제를 보여주는 자동화된 대시보드 또는 사용자 지정 대시보드를 볼 수 있습니다. CloudWatch Application Insights는 애플리케이션 및 인프라와 관련된 지속적인 문제를 신속하게 격리할 수 있도록 설계되었습니다.

CloudWatch Logs에 로그 메시지를 기록하려면 `AWS.Logger.NLog` NuGet 패키지를 .NET 프로젝트에 추가합니다. 그런 다음 CloudWatch Logs를 대상으로 사용하도록 `NLog.config` 파일을 업데이트합니다.

## 사전 조건 및 제한 사항
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ 다음을 수행하는.NET 웹 또는 콘솔 애플리케이션
  + 지원되는 .NET 프레임워크 또는 .NET Core 버전 사용. 자세한 내용은 *제품 버전*을 참조하세요.
  + NLogs로 로그 데이터를 Application Insights로 보내기.
+ AWS 서비스에 대한 IAM 역할 생성 권한. 자세한 내용은 [서비스 역할 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#id_roles_create_service-permissions)을 참조하세요.
+ AWS 서비스에 역할 전달 권한. 자세한 내용은 [사용자에게 AWS 서비스 역할을 전달할 수 있는 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

**제품 버전**
+ .NET Framework 버전 3.5 이상
+ .NET Core 버전 1.0.1, 2.0.0 이상

## 아키텍처
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-architecture"></a>

**대상 기술 스택  **
+ NLog
+ Amazon CloudWatch Logs

**대상 아키텍처**

![.NET 애플리케이션의 로그 데이터를 Amazon CloudWatch Log에 쓰는 NLog의 아키텍처 다이어그램.](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/0ac9c3ad-2a28-415f-afc3-7fe3494b2b63/images/daea9f2f-7242-4ed2-843e-655d843dcfdf.png)


1. .NET 애플리케이션은 NLog 로깅 프레임워크에 로그 데이터를 작성합니다.

1. NLog는 CloudWatch Logs에 로그 데이터를 작성합니다.

1. CloudWatch 경보와 사용자 지정 대시보드를 사용하여.NET 애플리케이션을 모니터링합니다.

## 도구
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-tools"></a>

**서비스**
+ [Amazon CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html)는 애플리케이션과 기본 AWS 리소스의 상태를 관찰하는 데 도움이 됩니다.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)는 모든 시스템, 애플리케이션 및 AWS 서비스의 로그를 중앙 집중화하여 모니터링하고 안전하게 보관할 수 있도록 도와줍니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 사용자에 대한 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있습니다.
+ [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html)은 PowerShell 명령줄에서 AWS 리소스에 대한 작업을 스크립팅하는 데 도움이 되는 PowerShell 모듈 세트입니다.

**기타 도구**
+ [Logger.Nlog](https://www.nuget.org/packages/AWS.Logger.NLog)는 CloudWatch Logs에 로그 데이터를 기록하는 NLog 대상입니다.
+ [NLog](https://nlog-project.org/)는 데이터베이스, 로그 파일 또는 콘솔과 같은 대상에 로그 데이터를 쓰는 데 도움이 되는 .NET 플랫폼용 오픈 소스 로깅 프레임워크입니다.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)은 Windows, Linux 및 macOS에서 실행되는 마이크로소프트 자동화 및 구성 관리 프로그램입니다.
+ [Visual Studio](https://docs.microsoft.com/en-us/visualstudio/get-started/visual-studio-ide?view=vs-2022)는 컴파일러, 코드 완성 도구, 그래픽 디자이너 및 소프트웨어 개발을 지원하는 기타 기능을 포함하는 통합 개발 환경(IDE)입니다.

## 모범 사례
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-best-practices"></a>
+ 대상 로그 그룹에 대한 [보존 정책](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#SettingLogRetention)을 설정합니다. 이 작업은 NLog 구성 외부에서 수행해야 합니다. 기본적으로 CloudWatch Logs에서 로그 데이터는 무기한으로 저장됩니다.
+ [AWS; 액세스 키 관리를 위한 모범 사례](https://docs.aws.amazon.com/accounts/latest/reference/credentials-access-keys-best-practices.html)를 준수합니다.

## 에픽
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-epics"></a>

### 액세스 및 도구 설정
<a name="set-up-access-and-tools"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| IAM 정책을 생성합니다. | IAM 설명서의 [JSON 편집기를 사용하여 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) 지침을 따릅니다. CloudWatch Logs가 로그를 읽고 쓰는데 필요한 최소 권한을 가진 다음 JSON 정책을 입력합니다.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "logs:CreateLogGroup",<br />                "logs:CreateLogStream",<br />                "logs:GetLogEvents",<br />                "logs:PutLogEvents",<br />                "logs:DescribeLogGroups",<br />                "logs:DescribeLogStreams",<br />                "logs:PutRetentionPolicy"<br />            ],<br />            "Resource": [<br />                "*"<br />            ]<br />        }<br />    ]<br />}</pre> | AWS 관리자, AWS DevOps | 
| IAM 역할을 생성합니다. | IAM 설명서의 [AWS 서비스에 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) 지침을 따릅니다. 이전에 생성한 정책을 선택합니다. 이는 CloudWatch Logs가 로깅 작업을 수행하는 데 맡는 역할입니다. | AWS 관리자, AWS DevOps | 
| AWS Tools for PowerShell 설정 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.html) | 일반 AWS | 

### NLog 구성
<a name="configure-nlog"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| NuGet 패키지를 설치합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.html) | 앱 개발자 | 
| 로깅 대상을 구성합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.html)샘플 구성 파일은 이 패턴의 [추가 정보](#configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-additional) 섹션을 참조하세요. 애플리케이션을 실행하면 NLog가 로그 메시지를 작성하여 CloudWatch Logs로 전송합니다. | 앱 개발자 | 

### 로그 검증 및 모니터링
<a name="validate-and-monitor-logs"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 로깅 검증. | CloudWatch Logs 설명서의 [CloudWatch Logs로 전송된 로그 데이터 보기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData) 지침을 따릅니다. .NET 애플리케이션에 대한 로그 이벤트가 기록되고 있는지 확인합니다. 로그 이벤트가 기록되지 않는 경우 이 패턴의 [문제 해결](#configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-troubleshooting) 섹션을 참조하세요. | 일반 AWS | 
| .NET 애플리케이션 스택을 모니터링합니다. | 사용 사례에 따라 CloudWatch에서 모니터링을 구성합니다. [CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html), [CloudWatch 지표 인사이트](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html) 및 [CloudWatch 애플리케이션 통찰력](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html)을 사용하여 .NET 워크로드를 모니터링할 수 있습니다. 알림을 받을 수 있도록 [경보](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)를 구성하고 단일 보기에서 워크로드를 모니터링하기 위한 사용자 지정 [대시보드](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)를 만들 수도 있습니다. | 일반 AWS | 

## 문제 해결
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 로그 데이터가 CloudWatch Logs에 표시되지 않습니다. | CloudWatch Logs가 취하는 IAM 역할에 IAM 정책이 연결되도록 해야 합니다. 지침은 [에픽](#configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-epics) 섹션의 *액세스 및 도구 설정* 섹션을 참조하세요. | 

## 관련 리소스
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-resources"></a>
+ [로그 그룹 및 로그 스트림 작업](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)(CloudWatch Logs 설명서)
+ [Amazon CloudWatch Logs 및 .NET 로깅 프레임워크](https://aws.amazon.com/blogs/developer/amazon-cloudwatch-logs-and-net-logging-frameworks/)(AWS Blog 게시물)

## 추가 정보
<a name="configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog-additional"></a>

다음은 샘플 `NLog.config` 파일입니다.

```
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  <nlog>
    <extensions>
      <add assembly="NLog.AWS.Logger" />
    </extensions>
    <targets>
      <target name="aws" type="AWSTarget" logGroup="NLog.TestGroup" region="us-east-1" profile="demo"/>
    </targets>
    <rules>
      <logger name="*" minlevel="Info" writeTo="aws" />
    </rules>    
  </nlog>
</configuration>
```