AWS

CloudWatch Logs 를 통해 로그 수집하기

chanyoun 2025. 12. 26. 18:31
cloud-watch 를 통한 logging

CloudWatch Logs

개요

기존 프로젝트에서는 ELK(Stack) 기반으로 로그를 수집·분석했습니다. 하지만 새로운 프로젝트에서는 운영 복잡도 증가와 비용 부담을 고려하여 CloudWatch Logs + Log Insights 기반으로 로그 시스템을 구성했습니다.

CloudWatch Logs는 AWS 네이티브 서비스로, 인프라 관리 부담을 줄이면서도 충분한 로그 수집 및 분석 기능을 제공합니다.

CloudWatch 로그 흐름

Application Log (file)
   ↓
CloudWatch Agent (tail)
   ↓
CloudWatch Logs (Log Group / Log Stream)
   ↓
CloudWatch Log Insights

장점

  • AWS 네이티브 환경으로 권한, 보안, 비용 관리가 일원화됩니다.
  • 단일 Agent로 로그 수집 구성이 단순화됩니다.
  • Log Insights를 통해 즉시 로그 쿼리가 가능합니다.

1. Log Group 생성 (AWS Console)

경로

AWS Console → CloudWatch → Log Management

CloudWatch 콘솔에서 로그 그룹 생성 버튼을 통해 로그 그룹을 생성합니다.

log-group-create

로그 그룹의 세부 설정은 각 환경(dev, prod 등)에 맞게 설정하면 됩니다.

 

2. EC2에 CloudWatch Agent 설치 (Ubuntu)

2.1 패키지 다운로드

wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb

2.2 deb 패키지 설치

sudo dpkg -i amazon-cloudwatch-agent.deb

2.3 설치 확인

/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -h

image-20251226164536025

설치가 정상적으로 완료되면 위와 같은 도움말이 출력됩니다.

3. CloudWatch Agent 설정 (파일 tail 방식)

3.1 설정 파일 경로

/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json

3.2 설정 파일 편집

// 편집창
sudo vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json

3.3 설정 예시

{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "logback 등을 통해 저장한 로그 파일 경로",
            "log_group_name": "로그 그룹명",
            "log_stream_name": "{instance_id}-access"
          },
          {
            "file_path": "logback 등을 통해 저장한 로그 파일 경로",
            "log_group_name": "로그 그룹명",
            "log_stream_name": "{instance_id}-warn"
          },
          {
            "file_path": "logback 등을 통해 저장한 로그 파일 경로",
            "log_group_name": "로그 그룹명",
            "log_stream_name": "{instance_id}-error"
          }
        ]
      }
    }
  }
}

3.4 설정 반영 및 Agent 시작

아래 명령어는 설정 파일을 적용하고 CloudWatch Agent를 시작하는 명령어입니다.

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config \
  -m ec2 \
  -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \
  -s

3.5 상태 확인

sudo systemctl status amazon-cloudwatch-agent

image-20251226165039550

4. IAM 권한 설정 (필수)

Agent 실행 시 다음과 같은 오류가 발생할 수 있습니다.

AccessDeniedException: is not authorized to perform: logs:PutLogEvents

4.1 원인

해당 오류는 EC2 인스턴스에 CloudWatch Logs로 로그를 전송할 권한이 없을 때 발생합니다.

4.2 해결 방법

EC2 인스턴스에 IAM Role을 추가하고, 다음 정책을 Attach합니다.

CloudWatchAgentServerPolicy

스크린샷 2025-12-26 오후 4.54.18

5. 로그 확인 (CloudWatch Console)

경로

CloudWatch → Log Management → 생성한 Log Group
  • EC2의 instance_id 기준으로 Log Stream이 자동 생성됩니다.
  • 설정한 파일 경로별로 로그가 분리되어 수집됩니다.

image-20251226180947474

Step 6. Log Insights를 통한 로그 필터링

경로

CloudWatch -> Logs Insights

CloudWatch Log Insights를 사용하면 별도의 로그 분석 도구 없이 즉시 로그를 조회할 수 있습니다.

6.1 예시 쿼리

fields @timestamp, @message
| filter $.id = "2"
| sort @timestamp desc

위 쿼리는 특정 id 값을 기준으로 로그를 필터링하고 최신 로그 순으로 정렬합니다.

 

CloudWatch Log Insights는 쿼리 실행 시 스캔한 로그 용량 기준으로 과금됩니다.

즉, 쿼리 결과 건수와는 무관하게, 쿼리가 조회한 전체 로그 데이터 크기에 따라 비용이 발생합니다.

따라서 다음 사항을 권장합니다.

  • 조회 기간을 최대한 좁게 설정합니다.
  • 필터 조건을 먼저 적용합니다.