Logs
Logs(로그)는 애플리케이션의 이벤트에 대한 풍부한 컨텍스트 정보를 제공합니다. 디버깅과 문제 원인을 파악하는 데 매우 필수적입니다.
이 섹션에서는 .NET 애플리케이션에서 로그를 생성하고 AWS의 네이티브 로그 서비스인 Amazon CloudWatch Logs로 전송하기 위한 모범 사례 레시피를 제공합니다.
Amazon EC2 인스턴스 또는 온프레미스 서버의 로그 파일을 Amazon CloudWatch Logs로 스트리밍
기존 .NET 애플리케이션이 로그 파일에 로그를 기록하고 있으며, 코드 변경 없이 Amazon CloudWatch Logs를 로그 저장 및 분석에 활용하고자 할 때 이 방법을 사용할 수 있습니다.
Step 1: 애플리케이션이 실행 중인 Amazon EC2 인스턴스 또는 온프레미스 서버에 CW Agent를 설치합니다. CW Agent 설치 방법은 여기에서 확인할 수 있습니다.
Step 2: 다음으로 CloudWatch Agent가 CloudWatch에 로그를 기록할 수 있도록 권한을 부여해야 합니다. CloudWatch Agent가 로그를 기록하는 데 필요한 권한을 부여하기 위해 IAM 역할, IAM 사용자 또는 둘 다를 생성합니다. Amazon EC2 인스턴스에서 Agent를 사용할 경우 IAM 역할을 생성해야 하고, 온프레미스 서버에서 사용할 경우 IAM 사용자를 생성해야 합니다. CloudWatchAgentServerPolicy는 CloudWatch에 로그를 기록하는 데 필요한 권한을 포함하는 AWS 관리형 IAM 정책입니다.
CW Agent에 권한을 부여하려면 이 지침을 따르세요.
Step 3: CloudWatch Agent를 서버에서 실행하기 전에, 하나 이상의 CloudWatch Agent 구성 파일을 생성해야 합니다. Agent 구성 파일은 Agent가 수집할 메트릭, 로그, 트레이스와 전송 대상(CloudWatch의 로그 그룹이나 네임스페이스 등)을 지정하는 JSON 파일입니다. 마법사를 사용하여 생성하거나 직접 처음부터 작성할 수 있습니다.
Agent 구성 파일에는 agent, metrics, logs, traces의 네 가지 섹션이 있습니다. 이전 단계(Step 2)에서 생성한 자격 증명을 agent 섹션에서 제공할 수 있습니다. logs 섹션은 CloudWatch Logs에 게시할 로그 파일을 지정합니다. 서버가 Windows Server를 실행하는 경우 Windows Event Log의 이벤트도 포함할 수 있습니다. agent 및 logs 섹션을 구성하는 자세한 방법은 여기에서 확인할 수 있습니다.
Step 4: 위의 모든 설정이 완료되면 CloudWatch Agent를 시작할 수 있습니다.
AWS SDK for .NET을 사용하여 .NET 애플리케이션에서 CloudWatch Logs로 로그 기록
Amazon CloudWatch Logs의 API를 사용하여 직접 로그를 기록하려면 AWS SDK for .NET을 활용할 수 있습니다.
AWS SDK for .NET은 AWS 서비스와 상호작용하는 .NET 애플리케이션 개발을 쉽게 해주는 라이브러리를 제공합니다. 라이브러리는 NuGet 패키지 형태로 제공됩니다.
Amazon CloudWatch Logs와 상호작용하려면 AWSSDK.CloudWatchLogs NuGet 패키지에서 제공하는 AmazonCloudWatchLogsClient 클래스를 사용해야 합니다.
Step 1: AWS CloudWatch Logs NuGet 패키지를 설치합니다.
dotnet add package AWSSDK.CloudWatchLogs
Step 2: AWS 자격 증명을 설정합니다.
애플리케이션이 CloudWatch Logs에 기록할 수 있는 적절한 권한을 갖추고 있는지 확인합니다. IAM 역할 할당, AWS 자격 증명 파일 사용 또는 환경 변수 설정을 통해 권한을 부여할 수 있습니다. 예를 들어, 아래 정책은 로그 그룹 및 로그 스트림을 생성하고 로그를 기록할 수 있는 권한을 제공합니다.
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}