OpenTelemetry를 사용하여 지표 전송
OTLP(OpenTelemetry Protocol)를 사용하여 CloudWatch에 사용자 지정 지표를 게시할 수 있습니다. OTel SDK(Java, Python, Go, .NET, Node.js), OTel Collector 또는 OTLP 호환 클라이언트를 사용할 수 있습니다.
CloudWatch OTel 엔드포인트
해당 리전의 CloudWatch OTLP 엔드포인트로 지표를 전송합니다.
https://monitoring.region.amazonaws.com/v1/metrics
인증은 표준 AWS SigV4 서명을 사용합니다. 서비스 이름은 monitoring입니다. 엔드포인트, 인증 옵션 및 제한에 대한 자세한 내용은 OTLP 엔드포인트 섹션을 참조하세요.
빠른 시작: 첫 번째 지표 게시
옵션 1: OTel Collector(프로덕션에 권장)
OTLP HTTP 내보내기 및 SigV4 인증을 사용하여 OTel Collector를 구성합니다.
receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: batch: send_batch_size: 200 timeout: 10s exporters: otlphttp: tls: insecure: false metrics_endpoint: "https://monitoring.us-east-1.amazonaws.com/v1/metrics" auth: authenticator: sigv4auth extensions: sigv4auth: service: "monitoring" region: "us-east-1" service: extensions: [sigv4auth] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [otlphttp]
자세한 설정 지침은 시작하기 섹션을 참조하세요.
옵션 2: OTel SDK(Python 예제)
from opentelemetry import metrics from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter # Point at the CloudWatch OTLP endpoint exporter = OTLPMetricExporter( endpoint="https://monitoring.us-east-1.amazonaws.com:443/v1/metrics" ) reader = PeriodicExportingMetricReader(exporter, export_interval_millis=60000) provider = MeterProvider(metric_readers=[reader]) metrics.set_meter_provider(provider) # Create and record a metric meter = metrics.get_meter("my-app") counter = meter.create_counter("http_requests_total", description="Total HTTP requests") counter.add(1, {"method": "GET", "path": "/api/users", "status": "200"})
옵션 3: OTel SDK(Java 예제)
import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.metrics.LongCounter; Meter meter = GlobalOpenTelemetry.getMeter("my-app"); LongCounter counter = meter.counterBuilder("http_requests_total") .setDescription("Total HTTP requests") .build(); counter.add(1, Attributes.of( AttributeKey.stringKey("method"), "GET", AttributeKey.stringKey("path"), "/api/users", AttributeKey.stringKey("status"), "200" ));
필요한 IAM 권한
ID 전송 지표에는 cloudwatch:PutMetricData 권한이 필요합니다. SigV4 인증의 경우 다음 정책을 연결합니다.
{ "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*" }
전달자 토큰 인증은 Metrics에 대한 전달자 토큰 인증 설정 섹션을 참조하세요.
지표가 도착하는지 확인
CloudWatch 콘솔을 열고 Query Studio로 이동하여 다음을 실행합니다.
http_requests_total
지표는 일반적으로 첫 번째 데이터 포인트가 전송된 후 1~2분 이내에 나타납니다.
지원되는 지표 유형
다음 표에서는 CloudWatch가 지원하는 OTel 지표 유형과 PromQL을 사용하여 쿼리하는 방법을 설명합니다.
| OTel 지표 유형 | PromQL 동작 |
|---|---|
| Counter | rate() 또는 increase()를 사용하여 쿼리 |
| Gauge | 직접 쿼리(현재 값) |
| 히스토그램(Histogram) | 백분위수에 histogram_quantile() 사용 |
모범 사례
OTLP를 통해 지표를 전송할 때는 다음 권장 사항을 따르세요.
-
의미 있는 지표 이름 사용 - OTel 이름 지정 규칙(예:
http.server.request.duration또는http_request_duration_seconds)을 따릅니다. -
레이블 카디널리티를 적절하게 유지 - 요청 ID 또는 UUID를 레이블 값으로 사용하지 않습니다.
-
적절한 내보내기 간격 설정 - 60초가 표준입니다. 간격이 짧을수록 비용이 증가합니다.
-
리소스 속성 사용 데이터 포인트당 레이블 대신 정적 메타데이터(서비스 이름, 버전, 환경)에 리소스 속성을 사용합니다.