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.durationohttp_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.