

# Métricas de CloudWatch (OTel)
<a name="metrics-pipeline-selection-criteria"></a>

Los criterios de selección determinan qué métricas de OTel entran en una canalización para su procesamiento. Cada criterio es una expresión con el formato `<path> == "<value>"` que se compara con un atributo específico de la métrica entrante. Se requiere al menos un criterio de selección.

Los criterios se agrupan en un bloque `match_all` con semántica AND. Para entrar en la canalización, una métrica debe coincidir con todas las expresiones del grupo.

## Rutas compatibles
<a name="selection-criteria-paths"></a>

Las siguientes rutas de OTTL son compatibles con los criterios de selección:


| Ruta | Descripción | 
| --- | --- | 
| `resource.attributes["key"]` | Atributo a nivel de recurso | 
| `instrumentation_scope.name` | Nombre del ámbito de instrumentación | 
| `instrumentation_scope.version` | Versión del ámbito de instrumentación | 
| `instrumentation_scope.attributes["key"]` | Atributo del ámbito de instrumentación | 
| `metric.name` | Nombre de métrica | 
| `datapoint.attributes["key"]` | Atributo a nivel de punto de datos | 
| `attributes["key"]` | Forma abreviada de `datapoint.attributes["key"]` | 

## Configuración
<a name="selection-criteria-configuration"></a>

Los criterios de selección se definen en la sección `source` de la configuración de la canalización:

```
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: {}
```

En el siguiente ejemplo se utilizan todos los tipos de rutas compatibles:

```
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: {}
```

## Comprobación mediante PromQL
<a name="selection-criteria-promql"></a>

CloudWatch asigna los ámbitos de atributos de OTTL a etiquetas de PromQL mediante la convención de prefijos `@`. Utilice esta asignación para comprobar en Estudio de consultas que la canalización procese las métricas según lo previsto:


| Ruta de OTTL de la canalización | Prefijo de etiqueta de PromQL | Ejemplo | 
| --- | --- | --- | 
| `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.` o sin prefijo | `status_code` | 

Por ejemplo, si la canalización agrega `resource.attributes["team"]` con el valor `"platform-engineering"`, puede confirmar que se aplicó:

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

## Requisitos y limitaciones
<a name="selection-criteria-requirements"></a>

Un único grupo `match_all`  
Cada canalización admite exactamente un grupo `match_all` en `selection_criteria`. No se pueden definir varios grupos `match_all` en una misma canalización.

Número mínimo de criterios  
Se requiere al menos una expresión en el grupo `match_all`.

Número máximo de criterios  
Un grupo `match_all` puede contener un máximo de 20 expresiones.

Semántica AND  
Para que una métrica entre en la canalización, deben coincidir todas las expresiones del grupo `match_all`.

Coincidencia exacta de cadenas  
Los valores deben ser cadenas estáticas. No se admiten caracteres comodín, expresiones regulares ni coincidencias parciales. Cada expresión debe utilizar el operador `==`.

Los criterios de las canalizaciones no se pueden superponer  
Cada punto de datos de una métrica debe coincidir como máximo con una canalización. Si un punto de datos coincide con los criterios de canalización nuevos y existentes, se produce un error en la creación de la canalización. Para evitar superposiciones, incluya al menos una ruta de atributo con valores distintos en los criterios de selección de cada canalización.  
Por ejemplo, los dos criterios de selección siguientes se superponen porque la canalización A selecciona todas las métricas de `payment-service`, lo que incluye la métrica específica a la que se dirige la canalización B:  

```
# 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"'
```