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 콘솔에서 로그 그룹 생성 버튼을 통해 로그 그룹을 생성합니다.

로그 그룹의 세부 설정은 각 환경(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

설치가 정상적으로 완료되면 위와 같은 도움말이 출력됩니다.
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

4. IAM 권한 설정 (필수)
Agent 실행 시 다음과 같은 오류가 발생할 수 있습니다.
AccessDeniedException: is not authorized to perform: logs:PutLogEvents
4.1 원인
해당 오류는 EC2 인스턴스에 CloudWatch Logs로 로그를 전송할 권한이 없을 때 발생합니다.
4.2 해결 방법
EC2 인스턴스에 IAM Role을 추가하고, 다음 정책을 Attach합니다.
CloudWatchAgentServerPolicy

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

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는 쿼리 실행 시 스캔한 로그 용량 기준으로 과금됩니다.
즉, 쿼리 결과 건수와는 무관하게, 쿼리가 조회한 전체 로그 데이터 크기에 따라 비용이 발생합니다.
따라서 다음 사항을 권장합니다.
- 조회 기간을 최대한 좁게 설정합니다.
- 필터 조건을 먼저 적용합니다.
'AWS' 카테고리의 다른 글
| CloudFormation을 활용한 이미지 변환 및 리사이징 (0) | 2025.11.18 |
|---|---|
| [AWS 비용 절감 #3]slack과 aws의 lambda 연동 (3) | 2025.07.09 |
| [AWS 비용 절감 #2] EC2 인스턴스 예약 실행으로 비용 최적화 (2) | 2025.07.04 |
| [AWS 비용 절감 #1] S3 + CloudFront + HTTPS 정적 웹사이트 (0) | 2025.05.19 |