View a markdown version of this page

Consultas PromQL - Amazon CloudWatch

Consultas PromQL

Al incorporar métricas de OpenTelemetry a CloudWatch mediante OpenTelemetry Protocol (OTLP), el modelo de datos OTLP jerárquico se aplana en etiquetas compatibles con PromQL. En esta sección se describe la estructura de las etiquetas, la sintaxis de PromQL para consultar estas etiquetas y la compatibilidad con UTF-8 en PromQL.

nota

PromQL en Prometheus 3 admite caracteres UTF-8 completos en nombres de métricas y etiquetas. Esto es especialmente importante en el caso de las métricas de OTLP, ya que las convenciones semánticas de OpenTelemetry utilizan puntos en los nombres de los atributos, por ejemplo, service.name. Anteriormente, estos puntos se sustituían por guiones bajos durante la traducción, lo que provocaba discrepancias entre lo que se definía en las convenciones de OpenTelemetry y lo que se podía consultar en Prometheus.

Cuando se utiliza PromQL en CloudWatch, la convención de prefijo @ distingue las etiquetas con ámbito de OTLP de las etiquetas estándar de Prometheus. Los campos dentro de cada ámbito utilizan un prefijo doble @ (por ejemplo, @resource.@schema_url), mientras que los atributos utilizan un prefijo de ámbito simple @, por ejemplo, @resource.service.name. Los atributos de puntos de datos también admiten acceso sin prefijo para mantener la compatibilidad con las consultas PromQL estándar; por ejemplo, {"http.server.active_requests"} y {"@datapoint.@name"="http.server.active_requests"} son equivalentes.

Las expresiones PromQL se escriben entre corchetes y especifican el nombre de la métrica y un conjunto opcional de comparadores de etiquetas. En el siguiente ejemplo, se seleccionan todas las series temporales de la métrica http.server.active_requests:

{"http.server.active_requests"}

En el siguiente ejemplo, se seleccionan todas las series temporales de la métrica http.server.active_requests en las que el atributo de recurso de OpenTelemetry service.name equivale a myservice:

{"http.server.active_requests", "@resource.service.name"="myservice"}

Puede combinar varios comparadores de etiquetas en una sola consulta. En el siguiente ejemplo, se seleccionan todas las series temporales de la métrica http.server.active_requests en las que el atributo de recurso de OpenTelemetry service.name equivale a myservice en todas las regiones de EE. UU.:

{"http.server.active_requests", "@resource.service.name"="myservice", "@aws.region"=~"us-.*"}

En el siguiente ejemplo, se muestra una consulta de rango. Calcula el valor promedio de todos los puntos de datos dentro de un rango de tiempo específico para cada serie temporal:

avg_over_time( {"http.server.active_requests", "@resource.service.name"="myservice"}[5m] )

En la tabla siguiente se resumen las convenciones de prefijo de cada ámbito de OTLP:

Alcance de OTLP Prefix de campos Prefijo de atributos Ejemplo

Recurso

@resource.@

@resource.

@resource.service.name="myservice"

Alcance de la instrumentación

@instrumentation.@

@instrumentation.

@instrumentation.@name="otel-go/metrics"

Punto de datos

@datapoint.@

@datapoint. o sin prefijo

cpu="cpu0" o @datapoint.cpu="cpu0"

Reservado para AWS

N/A

@aws.

@aws.account_id="123456789"

Consulta de métricas suministradas por AWS con PromQL

Para poder consultar las métricas suministradas por AWS en PromQL, primero debe habilitar el enriquecimiento de OpenTelemetry de las métricas suministradas. Consulte : Activación de las métricas suministradas en PromQL.

Tras habilitar el enriquecimiento de OpenTelemetry, las métricas suministradas por AWS se pueden consultar mediante PromQL con etiquetas adicionales. El nombre de la métrica es el mismo que el nombre de la métrica de CloudWatch original, y las dimensiones de CloudWatch originales están disponibles como atributos de puntos de datos. Están disponibles las siguientes etiquetas (el siguiente ejemplo es para una instancia de EC2):

Etiqueta PromQL Descripción Ejemplo

InstanceId

Dimensión de CloudWatch original, como atributo de punto de datos

i-0123456789abcdef0

"@resource.cloud.resource_id"

ARN completo del recurso

arn:aws:ec2:us-east-1:123456789012:instance/i-0123456789abcdef0

"@resource.cloud.provider"

Proveedor de servicios en la nube

aws

"@resource.cloud.region"

Región de AWS en la que se originó esta métrica

us-east-1

"@resource.cloud.account.id"

ID de cuenta de AWS en el que se originó esta métrica

123456789012

"@instrumentation.@name"

Nombre del ámbito de la instrumentación que identifica el servicio de origen

cloudwatch.aws/ec2

"@instrumentation.cloudwatch.source"

Identificador del origen del servicio

aws.ec2

"@instrumentation.cloudwatch.solution"

Identificador de la solución de enriquecimiento

CloudWatchOTelEnrichment

"@aws.tag.Environment"

Etiqueta de recurso de AWS

production

"@aws.account"

Cuenta de AWS en la que se incorporó esta métrica (etiqueta del sistema)

123456789012

"@aws.region"

Región de AWS en la que se incorporó esta métrica (etiqueta del sistema)

us-east-1

El siguiente ejemplo selecciona Invocations para una función de Lambda específica:

histogram_sum({Invocations, FunctionName="my-api-handler"})

El siguiente ejemplo selecciona Errors de Lambda para todas las funciones etiquetadas con un equipo específico:

histogram_sum( {Errors, "@instrumentation.@name"="cloudwatch.aws/lambda", "@aws.tag.Team"="backend"} )

El siguiente ejemplo calcula la cantidad total de Invocations de Lambda agrupadas por equipo:

sum by ("@aws.tag.Team")( {Invocations, "@instrumentation.@name"="cloudwatch.aws/lambda"} )

El siguiente ejemplo selecciona todas las series temporales de la métrica CPUUtilization de EC2. El uso de "@instrumentation.@name"="cloudwatch.aws/ec2" es para identificar de forma exclusiva la métrica CPUUtilization de EC2 y no de otros servicios de AWS, como Amazon Relational Database Service:

histogram_avg({CPUUtilization, "@instrumentation.@name"="cloudwatch.aws/ec2"})