View a markdown version of this page

Consultas do PromQL - Amazon CloudWatch

Consultas do PromQL

Quando você ingere métricas do OpenTelemetry no CloudWatch por meio do OpenTelemetry Protocol (OTLP), o modelo hierárquico de dados do OTLP é nivelado em rótulos compatíveis com o PromQL. Esta seção descreve a estrutura do rótulo, a sintaxe do PromQL para consultar esses rótulos e a compatibilidade com UTF-8 no PromQL.

nota

O PromQL no Prometheus 3 é compatível com caracteres UTF-8 completos em nomes de métricas e nomes de rótulos. Isso é particularmente importante para métricas do OTLP, porque as convenções semânticas do OpenTelemetry usam pontos em nomes de atributos, como service.name. Anteriormente, esses pontos eram substituídos por sublinhados durante a conversão, causando discrepâncias entre o que era definido nas convenções do OTel e o que era consultável no Prometheus.

Ao usar o PromQL no CloudWatch, a convenção de prefixo @ distingue os rótulos com escopo do OTLP dos rótulos padrão do Prometheus. Os campos dentro de cada escopo usam um prefixo @ duplo (por exemplo,@resource.@schema_url), enquanto os atributos usam um prefixo @ de escopo único, por exemplo, @resource.service.name. Os atributos do ponto de dados também são compatíveis com acesso direto (sem prefixo) para compatibilidade retroativa com consultas padrão do PromQL, por exemplo, {"http.server.active_requests"} e {"@datapoint.@name"="http.server.active_requests"} são equivalentes.

Uma expressão do PromQL está delimitada por chaves, especificando o nome da métrica e um conjunto de correspondências de rótulos. O seguinte exemplo seleciona todas as séries temporais para a métrica http.server.active_requests:

{"http.server.active_requests"}

O seguinte exemplo seleciona todas as séries temporais para a métrica http.server.active_requests em que o atributo do recurso do OpenTelemetry service.name é igual a myservice:

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

Você pode combinar várias correspondências de rótulos em uma única consulta. O exemplo a seguir seleciona todas as séries temporais da métrica http.server.active_requests em que o atributo do recurso do OpenTelemetry service.name é igual a myservice em todas as regiões dos EUA:

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

O exemplo a seguir mostra uma consulta de intervalo. Ele calcula o valor médio de todos os pontos de dados dentro de um intervalo de tempo especificado para cada série temporal:

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

A seguinte tabela resume as convenções de prefixo para cada escopo do OTLP:

Escopo do OTLP Prefixo de campos Prefixo de atributos Exemplo

Recurso

@resource.@

@resource.

@resource.service.name="myservice"

Escopo da instrumentação

@instrumentation.@

@instrumentation.

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

Pontos de dados

@datapoint.@

@datapoint. ou direto

cpu="cpu0" ou @datapoint.cpu="cpu0"

Reservado pela AWS

N/D

@aws.

@aws.account_id="123456789"

Consulta a métricas fornecidas pela AWS com o PromQL

Para poder consultar métricas fornecidas pela AWS no PromQL, você primeiro precisa habilitar o enriquecimento do OTel de métricas fornecidas. Consulte : Habilitação de métricas fornecidas no PromQL.

Depois de habilitar o enriquecimento do OTel, as métricas fornecidas pela AWS podem ser consultadas por meio do PromQL com rótulos adicionais. O nome da métrica é igual ao nome da métrica original do CloudWatch, e as dimensões originais do CloudWatch estão disponíveis como atributos do ponto de dados. Os seguintes rótulos estão disponíveis (o exemplo abaixo é para uma instância do EC2):

Rótulo do PromQL Descrição Exemplo

InstanceId

Dimensão original do CloudWatch, como atributo de ponto de dados

i-0123456789abcdef0

"@resource.cloud.resource_id"

ARN completo do recurso

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

"@resource.cloud.provider"

Provedor de nuvem

aws

"@resource.cloud.region"

Região da AWS de onde essa métrica se originou

us-east-1

"@resource.cloud.account.id"

ID da conta da AWS de onde essa métrica se originou

123456789012

"@instrumentation.@name"

Nome do escopo da instrumentação identificando o serviço de origem

cloudwatch.aws/ec2

"@instrumentation.cloudwatch.source"

Identificador do serviço de origem

aws.ec2

"@instrumentation.cloudwatch.solution"

Identificador da solução de enriquecimento

CloudWatchOTelEnrichment

"@aws.tag.Environment"

Tag de recurso da AWS

production

"@aws.account"

Conta da AWS em que essa métrica foi ingerida (rótulo do sistema)

123456789012

"@aws.region"

Região da AWS em que essa métrica foi ingerida (rótulo do sistema)

us-east-1

O exemplo a seguir seleciona Invocations para uma função específica do Lambda:

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

O seguinte exemplo seleciona Errors do Lambda para todas as funções marcadas com uma equipe específica:

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

O seguinte exemplo calcula o total de Invocations do Lambda agrupado por equipe:

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

O seguinte exemplo seleciona todas as séries temporais para a métrica CPUUtilization do EC2. O uso de "@instrumentation.@name"="cloudwatch.aws/ec2" é para corresponder exclusivamente à CPUUtilization do EC2 e não de outros serviços da AWS, como o Amazon Relational Database Service:

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