View a markdown version of this page

OpenTelemetry를 사용하여 지표 전송 - Amazon CloudWatch

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초가 표준입니다. 간격이 짧을수록 비용이 증가합니다.

  • 리소스 속성 사용 데이터 포인트당 레이블 대신 정적 메타데이터(서비스 이름, 버전, 환경)에 리소스 속성을 사용합니다.