AWS DVA-C02AWS 허브발행일 2025. 8. 15.원본 https://blog.naver.com/jword_/223969756315 ↗

AWS DVA-C02 #18 CloudWatch Custom Metrics

AWS DVA-C02 #18 CloudWatch Custom Metrics — #개발자의도구들 #AWS시험 #AWSCloudWatch #AWSCustomMetrics 참고: ExamPotic Disscussio...

#DVA-C02#Naver Blog

#개발자의도구들 #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하게 지표를 생성할 수 있는 기능을 제공한다.

​

text 코드 예제
                                    📌 특징

- 사용자 정의 지표: AWS가 자동 수집하지 않는 데이터를 직접 기록 가능
- Namespace 지정: 지표를 그룹화하는 논리적 구분 "Payments"
- Dimensions: 지표를 세분화 하는 키-값 쌍 ("vendor": "acme")
- 단위(Unit): Count, Percent, Seconds 등
- 🔔 CloudWatch Alarm 연동: 지표에 임계값 설정해 SNS 등으로 알림 발송 가능
- 기본 보관 기간 15개월

생성 방법(with. AWS SDK)

python 코드 예제
                                    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으로 전송

​

json 코드 예제
                                    {
  "_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
}