View a markdown version of this page

Envío de métricas mediante OpenTelemetry - Amazon CloudWatch

Envío de métricas mediante OpenTelemetry

Puede publicar sus métricas personalizadas en CloudWatch mediante OpenTelemetry Protocol (OTLP). Puede usar los SDK de OTel (Java, Python, Go, .NET, Node.js), el recopilador de OTel o cualquier cliente compatible con OTLP.

Punto de conexión de OTLP de CloudWatch

Envíe las métricas al punto de conexión de OTLP de CloudWatch en su región:

https://monitoring.region.amazonaws.com/v1/metrics

La autenticación utiliza la firma estándar de AWS SigV4. El nombre del servicio es monitoring. Para obtener más información sobre el punto de conexión, las opciones de autenticación y los límites, consulte Puntos de conexión de OTLP.

Inicio rápido: publicación de la primera métrica

Opción 1: recopilador de OTel (recomendado para producción)

Configure un recopilador de OTel con el exportador HTTP de OTLP y la autenticación de SigV4:

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]

Para obtener instrucciones detalladas para la configuración, consulte Introducción.

Opción 2: SDK de OTel (ejemplo de 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"})

Opción 3: SDK de OTel (ejemplo de 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" ));

Permisos de IAM necesarios

Las métricas de envío de identidad necesitan el permiso cloudwatch:PutMetricData. Para la autenticación de SigV4, adjunte la siguiente política:

{ "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*" }

Para obtener información sobre la autenticación mediante token de portador, consulte Configurar la autenticación por token de portador para métricas.

Verificación de que las métricas lleguen

Abra la consola de CloudWatch, vaya a Query Studio y ejecute:

http_requests_total

Las métricas suelen aparecer entre 1 y 2 minutos después del envío del primer punto de datos.

Tipos de métricas compatibles

En la siguiente tabla, se describen los tipos de métricas de OTel compatibles con CloudWatch y cómo consultarlos con PromQL.

Tipo de métrica de OTel Comportamiento de PromQL
Contador Uso de rate() o increase() para consultas
Calibre Consultas directas (valor actual)
Histograma Uso de histogram_quantile() para percentiles

Prácticas recomendadas

Siga estas recomendaciones cuando envíe métricas a través de OTLP:

  • Use nombres de métricas significativos: siga las convenciones de nomenclatura de OTel (por ejemplo, http.server.request.duration o http_request_duration_seconds).

  • Mantenga una cardinalidad de etiquetas razonable: evite los ID de solicitud o los UUID como valores de etiqueta.

  • Establezca un intervalo de exportación adecuado: 60 segundos es el valor estándar. Los intervalos más cortos aumentan el costo.

  • Use atributos de recursos: use atributos de recursos para metadatos estáticos (nombre del servicio, versión, entorno) en lugar de etiquetas por punto de datos.