CloudWatch 핵심 구성
| 구성 요소 | 역할 |
|---|---|
| Metrics | 시계열 수치 데이터 (CPU, 메모리 등) |
| Alarms | 메트릭 임계값 초과 시 알림·액션 |
| Logs | 로그 그룹·스트림 수집 |
| Logs Insights | 로그 쿼리 언어 |
| Dashboards | 메트릭·로그 시각화 |
| Events/EventBridge | 이벤트 기반 자동화 |
메트릭 조회
Bash
# EC2 CPU 사용률 조회 (최근 1시간, 5분 평균)
aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-xxxxxxxxxxxxxxxxx --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) --period 300 --statistics Average --query 'Datapoints[*].[Timestamp,Average]' --output table
# 메트릭 목록 (네임스페이스별)
aws cloudwatch list-metrics --namespace AWS/EC2
aws cloudwatch list-metrics --namespace AWS/RDS
aws cloudwatch list-metrics --namespace AWS/Lambda커스텀 메트릭 발행
Bash
# CLI로 커스텀 메트릭 발행
aws cloudwatch put-metric-data --namespace "MyApp" --metric-data '[{
"MetricName": "ActiveUsers",
"Value": 150,
"Unit": "Count",
"Dimensions": [
{"Name": "Environment", "Value": "production"}
]
}]'
# Python에서 발행
import boto3
cw = boto3.client('cloudwatch')
cw.put_metric_data(
Namespace='MyApp',
MetricData=[{
'MetricName': 'OrderCount',
'Value': 42,
'Unit': 'Count',
'Dimensions': [
{'Name': 'Region', 'Value': 'ap-northeast-2'}
]
}]
)알람 설정
Bash
# CPU 80% 초과 5분 지속 시 SNS 알림
aws cloudwatch put-metric-alarm --alarm-name high-cpu-prod --alarm-description "CPU over 80%" --namespace AWS/EC2 --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-xxxxxxxxx --statistic Average --period 300 --evaluation-periods 2 --threshold 80 --comparison-operator GreaterThanOrEqualToThreshold --alarm-actions arn:aws:sns:ap-northeast-2:ACCOUNT:alerts --ok-actions arn:aws:sns:ap-northeast-2:ACCOUNT:alerts
# 알람 목록
aws cloudwatch describe-alarms --query 'MetricAlarms[*].[AlarmName,StateValue,MetricName]' --output table
# 알람 상태 강제 변경 (테스트)
aws cloudwatch set-alarm-state --alarm-name high-cpu-prod --state-value ALARM --state-reason "Testing"CloudWatch Agent (EC2 메모리·디스크)
EC2 기본 메트릭에는 메모리와 디스크 사용량이 없으므로 Agent를 설치합니다.
Bash
# Agent 설치 (Ubuntu)
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i amazon-cloudwatch-agent.deb
# 설정 마법사 실행
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
# 또는 설정 파일 직접 작성
sudo tee /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json << 'EOF'
{
"metrics": {
"metrics_collected": {
"mem": {
"measurement": ["mem_used_percent"],
"metrics_collection_interval": 60
},
"disk": {
"measurement": ["disk_used_percent"],
"metrics_collection_interval": 60,
"resources": ["/", "/data"]
}
}
}
}
EOF
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 -sLogs Insights 쿼리
Bash
# CLI로 쿼리 실행
aws logs start-query --log-group-name /aws/lambda/my-function --start-time $(date -d '1 hour ago' +%s) --end-time $(date +%s) --query-string 'fields @timestamp, @message | filter @message like /ERROR/ | limit 20'콘솔에서 자주 쓰는 쿼리:
CODE
# Lambda 에러 분석
fields @timestamp, @message
| filter @message like /ERROR/
| stats count() by bin(5m)
# Lambda 실행 시간 Top 10
fields @timestamp, @duration
| sort @duration desc
| limit 10
# 특정 IP 요청 집계 (ALB 로그)
fields @timestamp, clientip, request
| filter clientip = "203.0.113.5"
| stats count() by request대시보드 생성
Bash
aws cloudwatch put-dashboard --dashboard-name production --dashboard-body '{
"widgets": [{
"type": "metric",
"properties": {
"title": "EC2 CPU",
"metrics": [["AWS/EC2","CPUUtilization","InstanceId","i-xxxxxxxx"]],
"period": 300,
"stat": "Average",
"view": "timeSeries"
}
}]
}'편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서AWS 공식 문서 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.