View a markdown version of this page

CloudWatch Metrics (OTel) - Amazon CloudWatch

CloudWatch Metrics (OTel)

Os critérios de seleção determinam quais métricas do OTel entram em um pipeline para processamento. Cada critério é uma expressão do formato <path> == "<value>" que corresponde a um atributo específico da métrica de entrada. Ao menos um critério de seleção é necessário.

Os critérios são agrupados dentro de um bloco match_all com semântica AND — uma métrica deve corresponder a todas as expressões do grupo para entrar no pipeline.

Caminhos compatíveis

Os seguintes caminhos OTTL são compatíveis nos critérios de seleção:

Caminho Descrição

resource.attributes["key"]

Atributo no nível do recurso

instrumentation_scope.name

Nome do escopo da instrumentação

instrumentation_scope.version

Versão do escopo da instrumentação

instrumentation_scope.attributes["key"]

Atributo do escopo da instrumentação

metric.name

Nome da métrica

datapoint.attributes["key"]

Atributo no nível do ponto de dados

attributes["key"]

Forma abreviada para o datapoint.attributes["key"]

Configuração

Os critérios de seleção são definidos na seção source da configuração do pipeline:

pipeline: source: cloudwatch_metrics: format: otlp selection_criteria: - match_all: - 'resource.attributes["service.name"] == "my-service"' - 'metric.name == "http.server.request.duration"' processor: - add_attributes: attributes: - key: resource.attributes["team"] value: "platform-engineering" sink: - cloudwatch_metrics: {}

O exemplo mostrado a seguir utiliza todos os tipos de caminho compatíveis:

pipeline: source: cloudwatch_metrics: format: otlp selection_criteria: - match_all: - 'resource.attributes["service.name"] == "my-service"' - 'instrumentation_scope.name == "my-scope"' - 'instrumentation_scope.version == "1.0.0"' - 'instrumentation_scope.attributes["library"] == "otel-java"' - 'metric.name == "http.server.request.duration"' - 'datapoint.attributes["status_code"] == "200"' - 'attributes["environment"] == "production"' processor: - add_attributes: attributes: - key: resource.attributes["team"] value: "observability" sink: - cloudwatch_metrics: {}

Verificação com o PromQL

O CloudWatch mapeia escopos de atributos OTLP para rótulos PromQL usando a convenção de prefixo @. Utilize esse mapeamento para verificar se seu pipeline está processando métricas conforme o esperado no Query Studio:

Caminho OTTL do pipeline Prefixo do rótulo do PromQL Exemplo

resource.attributes["key"]

@resource.

@resource.service.name

instrumentation_scope.name

@instrumentation.@name

@instrumentation.@name

instrumentation_scope.attributes["key"]

@instrumentation.

@instrumentation.library

datapoint.attributes["key"] / attributes["key"]

@datapoint. ou direto

status_code

Por exemplo, se seu pipeline adiciona resource.attributes["team"] com valor "platform-engineering", você pode confirmar se ele foi aplicado:

{"CPUUtilization", "@resource.team"="platform-engineering"}

Requisitos e limitações

Grupo match_all único

Cada pipeline suporta exatamente um grupo match_all em selection_criteria. Você não pode definir vários grupos match_all em um único pipeline.

Critérios mínimos

Pelo menos uma expressão é necessária no grupo match_all.

Critérios máximos

Um grupo match_all pode conter no máximo 20 expressões.

Semântica AND

Todas as expressões no grupo match_all devem corresponder para que uma métrica entre no pipeline.

Correspondência exata de strings

Os valores devem ser strings estáticas. Curingas, expressões regulares e correspondências parciais não são compatíveis. Cada expressão deve utilizar o operador ==.

Sem critérios de sobreposição entre pipelines

Cada ponto de dados de métrica deve corresponder a no máximo um pipeline. Se um ponto de dados corresponder aos critérios novos e existentes do pipeline, a criação do pipeline falhará. Para evitar sobreposições, inclua pelo menos um caminho de atributo com valores distintos nos critérios de seleção de cada pipeline.

Por exemplo, os dois critérios de seleção mostrados a seguir se sobrepõem porque o Pipeline A seleciona todas as métricas de payment-service, o que inclui a métrica específica que o Pipeline B visa:

# Pipeline A — selects ALL metrics from payment-service selection_criteria: - match_all: - 'resource.attributes["service.name"] == "payment-service"' # Pipeline B — FAILS: a datapoint with service.name="payment-service" # and metric.name="http.server.request.duration" matches both pipelines selection_criteria: - match_all: - 'metric.name == "http.server.request.duration"'