CloudWatch, CloudTrail, Config (관측과 감사의 기본기)
무엇이 일어나고 있는가(CloudWatch 지표, 로그, 경보), 누가 무엇을 했는가(CloudTrail), 리소스가 규칙을 지키고 있는가(Config)를 나눠 설명합니다. 꼭 걸어야 할 경보, Logs Insights 쿼리, 조직 단위 추적, 2026 년 Maintenance 가 된 CloudTrail Lake, 로그 비용 줄이는 법까지 정리합니다.
세 서비스의 역할
| 질문 | 서비스 | 데이터 |
|---|---|---|
| 지금 시스템 상태는? | CloudWatch | 지표, 로그, 경보, 추적, 대시보드 |
| 누가 언제 무엇을 했나? | CloudTrail | API 호출 기록(관리 이벤트, 데이터 이벤트) |
| 리소스 설정이 규칙에 맞나? 언제 바뀌었나? | AWS Config | 리소스 구성 이력, 규칙 평가 결과 |
장애가 나면 CloudWatch 로 증상을 보고, CloudTrail 로 직전에 누가 무엇을 바꿨는지 찾고, Config 로 그 리소스의 이전 설정과 비교하는 순서가 흔합니다.
CloudWatch
지표와 경보
AWS 서비스는 기본 지표를 자동으로 보냅니다. EC2 의 기본 지표는 5 분 간격이고 세부 모니터링을 켜면 1 분입니다. 메모리와 디스크 사용률은 기본 지표에 없으므로 CloudWatch 에이전트를 설치해야 합니다.
처음 계정을 운영할 때 최소한 이 경보는 겁니다.
| 대상 | 지표 | 조건 예 |
|---|---|---|
| ALB | HTTPCode_Target_5XX_Count, TargetResponseTime | 5 분 동안 5XX 비율 1% 초과, p99 지연 2 초 초과 |
| EC2, ECS | CPUUtilization, 에이전트의 mem_used_percent | 15 분 동안 85% 초과 |
| RDS | FreeStorageSpace, CPUUtilization, DatabaseConnections | 남은 스토리지 10% 미만 |
| Lambda | Errors, Throttles, Duration | 오류율, 제한 시간에 근접한 p99 |
| SQS | ApproximateAgeOfOldestMessage | 처리 지연이 기준 초과 |
| 결제 | Budgets 경보 | 예산의 80%, 100% 예상 |
aws cloudwatch put-metric-alarm --alarm-name alb-5xx-high \
--namespace AWS/ApplicationELB --metric-name HTTPCode_Target_5XX_Count \
--dimensions Name=LoadBalancer,Value=app/web-prod/50dc6c495c0c9188 \
--statistic Sum --period 60 --evaluation-periods 5 --datapoints-to-alarm 3 \
--threshold 50 --comparison-operator GreaterThanThreshold \
--treat-missing-data notBreaching \
--alarm-actions arn:aws:sns:ap-northeast-2:111122223333:oncall- N 중 M 평가(
--datapoints-to-alarm)로 순간 튐에 울리지 않게 합니다. - 누락 데이터 처리를 의도에 맞게 정합니다. 트래픽이 없으면 지표가 없는 지표(오류 수)는
notBreaching, 하트비트처럼 없으면 문제인 지표는breaching입니다. - 여러 경보를 AND, OR 로 묶는 복합 경보로 알림 폭주를 줄입니다.
- 이상 탐지 경보는 요일과 시간대 패턴을 학습해 고정 임계값보다 오탐이 적습니다.
로그와 Logs Insights
로그 그룹마다 보존 기간을 꼭 정합니다. 기본값은 "만료 없음" 이라 몇 년 치 로그가 쌓여 요금이 계속 늘어납니다.
fields @timestamp, @message
| filter @message like /ERROR|Exception/
| parse @message /requestId=(?<rid>[a-z0-9-]+)/
| stats count(*) as errors by bin(5m), rid
| sort errors desc
| limit 20- 로그는 구조화(JSON)해서 남기면
fields,filter가 쉬워집니다. - 자주 보는 패턴은 지표 필터로 지표로 바꾸고 경보를 겁니다.
- 실시간 검색이 거의 필요 없는 로그는 Infrequent Access 로그 클래스로 만들면 수집 단가가 낮습니다(로그 그룹을 만들 때만 정할 수 있음).
- 중앙 계정으로 모으려면 교차 계정 관측성(OAM)이나 구독 필터로 Firehose, S3 에 보냅니다.
애플리케이션 관측
Application Signals 는 OpenTelemetry 기반으로 서비스별 지연, 오류, 호출 관계를 자동으로 그리고 SLO 를 정의하게 합니다. 외부에서 주기적으로 URL 을 검사하는 Synthetics 카나리아, 실제 사용자 브라우저 성능을 재는 RUM 도 있습니다. 컨테이너는 Container Insights(ECS, EKS)를 켭니다.
ML 로 이상을 찾던 Amazon DevOps Guru 는 2026-09-29 공지로 Sunset 단계에 들어가 2027-09-30 에 지원이 끝납니다. 새로 도입하지 않습니다. 장애 조사를 자동화하는 도구로는 2026-03-31 에 GA 된 AWS DevOps Agent 가 있으니, 대체 여부는 공식 이전 안내와 함께 검토합니다.
CloudTrail
- 이벤트 기록: 관리 이벤트(리소스 생성, 수정, 삭제, 로그인)는 추적을 만들지 않아도 리전별 최근 90 일을 콘솔에서 무료로 볼 수 있습니다.
- 추적(trail): 이벤트를 S3 와 CloudWatch Logs 로 장기 보관합니다. 관리 이벤트의 첫 사본은 무료이고, 데이터 이벤트(S3 객체 읽기, Lambda 호출 등)는 건수로 과금합니다.
- 조직 추적: 관리 계정이나 위임 관리자에서 만들면 모든 계정의 모든 리전 이벤트가 로그 아카이브 계정의 버킷 하나로 모입니다. Control Tower 랜딩 존은 이것을 기본으로 만듭니다.
- 로그 파일 무결성 검증을 켜서 로그가 바뀌지 않았음을 증명할 수 있게 합니다.
aws cloudtrail lookup-events --region ap-northeast-2 \
--lookup-attributes AttributeKey=EventName,AttributeValue=AuthorizeSecurityGroupIngress \
--start-time 2026-10-20T00:00:00Z --max-results 20데이터 이벤트는 고급 이벤트 선택기로 필요한 버킷, 작업만 골라 기록합니다. 모든 S3 읽기를 기록하면 요금이 빠르게 커집니다.
CloudTrail Lake 의 상태
이벤트를 SQL 로 질의하는 CloudTrail Lake 는 2026-03-31 서비스 가용성 공지에서 Maint 대상으로 발표됐고, 2026-05-31 부터 새 고객을 받지 않습니다. 이미 쓰는 계정은 계속 쓸 수 있지만, 새로 설계한다면 S3 의 추적 로그를 Athena 로 질의하는 방식을 기본으로 둡니다.
SELECT eventtime, useridentity.arn, eventname, sourceipaddress
FROM cloudtrail_logs
WHERE eventname IN ('DeleteBucket','PutBucketPolicy','StopLogging')
AND eventtime > '2026-10-01'
ORDER BY eventtime DESC LIMIT 50;
AWS Config
Config 는 리소스의 구성을 기록하고 규칙으로 평가합니다.
- 관리형 규칙:
s3-bucket-public-read-prohibited,restricted-ssh,rds-storage-encrypted,iam-root-access-key-check같은 수백 개의 미리 만든 규칙. - 적합성 팩: CIS, 운영 모범 사례처럼 규칙 묶음을 한 번에 배포합니다.
- 자동 교정: 규칙 위반 시 Systems Manager Automation 문서로 고칩니다(예: 퍼블릭 버킷의 퍼블릭 액세스 차단 켜기).
- 애그리게이터: 조직 전체의 준수 상태를 한 계정에서 봅니다.
팁 Config 는 기록하는 구성 항목 수로 과금합니다. 자주 바뀌는 리소스(오토 스케일링으로 생겼다 사라지는 EC2, 네트워크 인터페이스)가 많으면 비용이 커집니다. 리소스 유형별로 기록 빈도를 일별로 낮추거나, 필요 없는 유형은 기록에서 뺍니다.
비용 줄이기
- 로그 그룹 보존 기간을 전부 정하고(예: 앱 로그 30 일, 감사 로그는 S3 에 장기), 디버그 로그를 운영에서 끕니다.
- 사용자 지정 지표의 차원에 요청 ID, 사용자 ID 처럼 값이 무한한 항목을 넣지 않습니다. 차원 조합마다 지표 하나로 과금됩니다.
- VPC 흐름 로그는 S3 로 보내고 Parquet 형식을 고르면 저장과 질의가 쌉니다.
- 대시보드 수, 경보 수도 요금이 있습니다. 쓰지 않는 것을 분기마다 정리합니다.