Métricas de CloudWatch (OTel)
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
Las siguientes rutas de OTTL son compatibles con los criterios de selección:
| Ruta | Descripción |
|---|---|
|
Atributo a nivel de recurso |
|
Nombre del ámbito de instrumentación |
|
Versión del ámbito de instrumentación |
|
Atributo del ámbito de instrumentación |
|
Nombre de métrica |
|
Atributo a nivel de punto de datos |
|
Forma abreviada de |
Configuración
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
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 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
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
- Un único grupo
match_all -
Cada canalización admite exactamente un grupo
match_allenselection_criteria. No se pueden definir varios gruposmatch_allen 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_allpuede 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"'