/엔지니어/클라우드/AWS CloudWatch — 모니터링·알람·로그
클라우드중급awscloudwatch모니터링

AWS CloudWatch — 모니터링·알람·로그 수집 실전

CloudWatch 메트릭 조회, 커스텀 메트릭 발행, 알람 설정, Logs Insights로 로그 쿼리, EC2·Lambda·RDS 대시보드 구성 방법을 설명합니다.

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 -s

Logs 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"
      }
    }]
  }'
#aws#cloudwatch#모니터링#알람#로그#metrics
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서AWS 공식 문서

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.