4.1.4 Implement Custom Metrics (EMF)

Implement Custom Metrics

PutMetricData vs EMF

PutMetricDataEMF
MethodAPI callStructured log
CostPer API call ($)Free (log ingestion only)
LatencyExtra network callNo extra call
Best forEC2, ECSLambda, ephemeral resources

CloudWatch Embedded Metric Format (EMF)

Lợi ích:

  • Generate actionable custom metrics từ ephemeral resources (Lambda, containers)
  • Không cần extra API calls
  • Real-time incident detection và visualization
  • Tự động extract metric values từ structured log events

EMF Format

import json

def handler(event, context):
    print(json.dumps({
        "_aws": {
            "Timestamp": 1705312200000,
            "CloudWatchMetrics": [{
                "Namespace": "MyApp",
                "Dimensions": [["Service", "Environment"]],
                "Metrics": [
                    {"Name": "OrderProcessingTime", "Unit": "Milliseconds"},
                    {"Name": "OrderCount", "Unit": "Count"}
                ]
            }]
        },
        "Service": "OrderService",
        "Environment": "prod",
        "OrderProcessingTime": 150,
        "OrderCount": 1
    }))

Lambda Powertools — Metrics

from aws_lambda_powertools import Metrics
from aws_lambda_powertools.metrics import MetricUnit

metrics = Metrics(namespace="MyApp", service="OrderService")

@metrics.log_metrics(capture_cold_start_metric=True)
def handler(event, context):
    metrics.add_metric(name="OrdersProcessed", unit=MetricUnit.Count, value=1)

Custom CloudWatch Namespace

Scenario thi: Tạo shared dashboard trong CloudWatch để monitor 5 applications khác nhau.

Giải pháp:

  • Tạo custom CloudWatch namespace cho mỗi application với unique metric name
  • Hoặc set up custom CloudWatch dimension với unique metric name cho mỗi application

Lưu ý: Không có default namespace, bạn phải specify namespace khi tảo metric publish lên CloudWatch.

Exam Tip:

  • EMF = preferred cho Lambda (no extra API calls, no extra cost)
  • PutMetricData cho EC2/ECS
  • Lambda Powertools simplifies EMF
  • EMF giúp generate metrics từ ephemeral resources và real-time incident detection
  • Phải specify namespace khi publish custom metrics