AWS DVA-C02 #18 CloudWatch Custom Metrics
AWS DVA-C02 #18 CloudWatch Custom Metrics — #개발자의도구들 #AWS시험 #AWSCloudWatch #AWSCustomMetrics 참고: ExamPotic Disscussio...
#개발자의도구들 #AWS시험 #AWSCloudWatch #AWSCustomMetrics
참고: ExamPotic Disscussion
문제 찾는법 : 여기 최하단
요구사항 분석
- AWS Lambda로 주문 처리 (24/7 운영)
- 외부 결제 벤더의 HTTP API 호출로 결제 처리
- 부하 테스트에서 외부 결제 API가 간헐적으로 타임아웃 및 오류 발생
- 일부 오류는 예상 범위 내
- 1시간 단위로 총 거래 건수 대비 오류 비율 계산
- 오류율이 5% 초과 시 지원팀에 알림
- 알림은 가까운 실시간(near real-time) 으로 전달
- 이미 기존 SNS 토픽이 있고, 이를 통해 지원팀에 알림 전송
- 운영 오버헤드가 낮고, 확장 가능한 방식 선호
- Lambda 내부 로직에서 실패 건수 집계 가능
- 에러율(%) 기준 조건부 알림
- 1시간 롤링 윈도우 기반
- 실시간에 가까운 탐지
- 저비용·저오버헤드 방식
보기 분석
A. CloudWatch Logs + Logs Insights + Lambda 주기 조회
- 결제 API 처리 결과를 CloudWatch Logs에 기록
- Logs Insights 쿼리로 오류율 계산
- Lambda 스케쥴 실행으로 결과 확인 후 SNS 알림 발송
B. CloudWatch Custom Metrics + Alarm
- Lambda에서 API 성공/실패 건수 커스텀 지표 발행
- CloudWatch Alam이 1시간 기준 오류율 > 5%시 SNS로 알린다.
C. SNS 직접 발행(모든 결과)
- 모든 결제 API 처리 결과를 새로운 SNS 토픽으로 발행
- 지원팀을 새 SNS 구독자로 추가
D. S3 + Athena 쿼리
- 결제 API 처리 결과를 S3에 저장
- Athena로 주기적 쿼리 실행 -> 오류율 계산
- 조건 만족 시 SNS 알림 발송
A. ❌ 관리 오버헤드가 크며, 준 실시간 구현이 어렵다.
B. ✅ 오버헤드 최소, 요구사항 충족, 실시간 반영 가능
C. ❌ 필터링 없음
D. ❌ 저장, 쿼리 오버헤드가 크다. 실시간성이 낮다.
개념 정리
https://aws.amazon.com/ko/blogs/korea/amazon-cloudwatch-custom-metrics/
CloudWatch
AWS 클라우드 리소스와 AWS에서 실행되는 어플리케이션을 위한 모니터링 서비스이다. AWS 서비스에 대해 총 300개가 넘는 기본 (built-in) 지표를 제공한다. 예를들어, EC2, RDS의 CPU 사용률, 네트워크 트리팩 인/아웃, ELB의 지연시간 등이 기본 지표로 설정되어 있다.
Custom Metrics
하지만, 기본으로 설정되어 있지 않는 지표에 대해서는 custom하게 지표를 생성할 수 있는 기능을 제공한다.
📌 특징
- 사용자 정의 지표: AWS가 자동 수집하지 않는 데이터를 직접 기록 가능
- Namespace 지정: 지표를 그룹화하는 논리적 구분 "Payments"
- Dimensions: 지표를 세분화 하는 키-값 쌍 ("vendor": "acme")
- 단위(Unit): Count, Percent, Seconds 등
- 🔔 CloudWatch Alarm 연동: 지표에 임계값 설정해 SNS 등으로 알림 발송 가능
- 기본 보관 기간 15개월
생성 방법(with. AWS SDK)
import boto3
cloudwatch = boto3.client('cloudwatch')
def publish_metrics(is_error: bool, env: str, vendor: str):
dims = [{'Name':'env','Value':env}, {'Name':'vendor','Value':vendor}]
cloudwatch.put_metric_data(
Namespace='Payments',
MetricData=[
{'MetricName':'Total','Dimensions':dims,'Unit':'Count','Value':1},
{'MetricName':'Errors','Dimensions':dims,'Unit':'Count','Value':1 if is_error else 0}
]
)
📌사용 예시
- 비즈니스 지표: 결제 성공률, 신규 가입 수, 장바구니 포기율
- 성능 지표: API 평균 응답 시간, DB 쿼리 지연 시간
- 품질 지표: 외부 API 실패 건수, 오류율
👉 장점
- CloudWatch Alarm, 대시보드, Metric Math와 바로 연동 가능
- 애플리케이션에서 직접 측정 → 모니터링 유연성 높다.
- Near real-time 알림 기능(1분 주기 평가)
⚠️ 단점/주의
- 비용: 기본 메트링 외 추가 지표는 건수와 보관 기간에 따라 과금됨
- 너무 세분화된 Dimension 남발 시 비용 증가 및 관리 복잡
추가 개념
EMF
Embedded Metric Format는 AWS CloudWatch Logs에 특정 JSON 형식으로 로그를 남기면, CloudWatch가 그 로그를 자동으로 Custom Metric으로 변환해주는 기능이에요.
👉 동작방식
- 앱 및 람다 함수에서 CloudWatch로 로그 전송
- 로그 중 EMF 형식(\_aws 키 포함 JSON) 감지
- CloudWatch가 해당 값을 Custom Metric으로 전송
{
"_aws": {
"Timestamp": 1730000000000,
"CloudWatchMetrics": [
{
"Namespace": "Payments",
"Dimensions": [["env", "vendor"]],
"Metrics": [
{"Name": "Total", "Unit": "Count"},
{"Name": "Errors", "Unit": "Count"}
]
}
]
},
"env": "prod",
"vendor": "acme",
"Total": 1,
"Errors": 0
}