Uso de expresiones de filtro - AWS X-Ray

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de expresiones de filtro

Use expresiones de filtro para ver un mapa de rastreo o los rastros de una solicitud, servicio, conexión entre dos servicios específicos (un borde) o solicitudes que cumplan una condición. X-Ray proporciona un lenguaje de expresiones de filtro para filtrar solicitudes, servicios y periferias teniendo en cuenta los datos presentes en los encabezados de la solicitud, el estado de la respuesta y los campos indexados en los segmentos originales.

Al elegir un periodo de tiempo de registros de seguimiento para ver en la consola de X-Ray, puede obtener más resultados que los que la consola puede mostrar. En la esquina superior derecha, la consola muestra el número de registros de seguimiento que analiza y si hay más registros de seguimiento disponibles. Puede utilizar una expresión de filtro para reducir el número de resultados a tan solo los rastros que desea encontrar.

Detalles de expresión de filtro

Al elegir un nodo en el mapa de rastreo, la consola crea una expresión de filtro en función del nombre del servicio del nodo y de los tipos de error presentes en función de la selección. Para encontrar registros de seguimiento que muestren problemas de rendimiento o relacionados con solicitudes específicas, puede ajustar la expresión proporcionada por la consola, o bien crear la suya propia. Si añade anotaciones con el X-RaySDK, también puede filtrar en función de la presencia de una clave de anotación o del valor de una clave.

nota

Si elige un rango de tiempo relativo en el mapa de rastreo y elige un nodo, la consola convierte el rango de tiempo en una hora absoluta de inicio y finalización. Para asegurarse de que los registros de seguimiento del nodo aparezcan en los resultados de búsqueda y evitar los tiempos de examen cuando el nodo no estaba activo, el intervalo de tiempo solo incluye las horas a las que el nodo envió registros de seguimiento. Si desea buscar con relación a la hora actual, puede volver a un intervalo de tiempo relativo en la página de registros de seguimiento y volver a analizar.

Si sigue habiendo más resultados disponibles de los que la consola puede mostrar, la consola muestra cuántos registros de seguimiento han coincidido y el número de registros de seguimiento analizados. El porcentaje que se muestra es el porcentaje del marco temporal seleccionado que se analizó. Para asegurarse de ver todos los registros de seguimiento coincidentes representados en los resultados, filtre aún más la expresión de filtro o seleccione un marco temporal más corto.

Para obtener los resultados más recientes en primer lugar, la consola comienza a analizar al final del intervalo de tiempo y va hacia atrás. Si hay un gran número de registros de seguimiento, pero pocos resultados, la consola divide el intervalo de tiempo en porciones y las analiza en paralelo. La barra de progreso muestra las partes del intervalo de tiempo que se han analizado.

Progress bar showing 52% of time range scanned, with 49 matching traces found.

Uso de expresiones de filtro con grupos

Los grupos son una colección de registros de seguimiento que se definen mediante una expresión de filtro. Puedes usar grupos para generar gráficos de servicios adicionales y proporcionar CloudWatch métricas de Amazon.

Los grupos se identifican por su nombre o por un nombre de recurso de Amazon (ARN) y contienen una expresión de filtro. El servicio compara los registros de seguimiento de entrada con la expresión y los almacena en consecuencia.

Puede crear y modificar grupos mediante el menú desplegable situado a la izquierda de la barra de búsqueda de expresiones de filtro.

nota

Si el servicio encuentra un error al evaluar un grupo, ese grupo deja de estar incluido en el procesamiento de los registros de seguimiento de entrada y se registra una métrica de error.

Para obtener más información acerca de los grupos, consulte Configuración de grupos.

Sintaxis de expresiones de filtro

Las expresiones de filtro pueden incluir una palabra clave, un operador único o binario y un valor para la comparación.

keyword operator value

Cada tipo de palabra clave tiene sus propios operadores. Por ejemplo, responsetime es una palabra clave numérica que se puede comparar con operadores relacionados con números.

ejemplo – solicitudes con tiempo de respuesta de más de 5 segundos
responsetime > 5

Puede combinar varias expresiones en una expresión compuesta utilizando los operadores AND u OR.

ejemplo – solicitudes con duración total de 5 a 8 segundos
duration >= 5 AND duration <= 8

Solo se detectan problemas con las palabras clave y los operadores sencillos en el nivel de registro de seguimiento. Si se produce un error posterior, pero la aplicación lo gestiona y no se muestra al usuario, este problema no se detectará al buscar con la palabra error.

Para encontrar registros de seguimiento con problemas posteriores, use las palabras clave complejas service() y edge(). Estas palabras clave permiten aplicar un filtro de expresión a todos los nodos posteriores, a un único nodo posterior o a un límite entre dos nodos. Para obtener un mayor nivel de detalle, puede filtrar los servicios y los bordes con la función id().

Palabras clave booleanas

Los valores de palabra clave booleana son true o false. Utilícelas para encontrar registros de seguimiento que resultaron erróneos.

Palabras clave booleanas
  • ok: el código de estado de la respuesta fue 2XX Success.

  • error: el código de estado de la respuesta fue 4XX Client Error.

  • throttle: el código de estado de la respuesta fue 429 Too Many Requests.

  • fault: el código de estado de la respuesta fue 5XX Server Error.

  • partial: la solicitud tiene segmentos incompletos.

  • inferred: la solicitud tiene segmentos inferidos.

  • first: el elemento es el primero de una lista enumerada.

  • last: el elemento es el último de una lista enumerada.

  • remote: la entidad de causa raíz es remota.

  • root: la solicitud es el punto de entrada o el segmento raíz de un registro de seguimiento.

Los operadores booleanos encuentran aquellos segmentos en los que la clave especificada es true o false.

Operadores booleanos
  • none: la expresión es verdadera si la palabra clave es verdadera.

  • !: la expresión es verdadera si la palabra clave es falsa.

  • =,!=: compara el valor de la palabra clave con la cadena true o false. Estos operadores actúan igual que los demás, pero son más explícitos.

ejemplo – estado de respuesta es 2XX OK
ok
ejemplo – el estado de respuesta no es 2XX OK
!ok
ejemplo – el estado de respuesta no es 2XX OK
ok = false
ejemplo – el último registro de seguimiento de error enumerado tiene el nombre de error "deserialize"
rootcause.fault.entity { last and name = "deserialize" }
ejemplo – solicitudes con segmentos remotos donde la cobertura es mayor que 0.7 y el nombre del servicio es "rastros"
rootcause.responsetime.entity { remote and coverage > 0.7 and name = "traces" }
ejemplo — solicitudes con segmentos inferidos donde el tipo de servicio es «:DynamoDB» AWS
rootcause.fault.service { inferred and name = traces and type = "AWS::DynamoDB" }
ejemplo – solicitudes que tienen un segmento con el nombre "data-plane" como raíz.
service("data-plane") {root = true and fault = true}

Palabras clave numéricas

Utilice palabras clave numéricas para buscar solicitudes con un tiempo de respuesta, duración o estado de respuesta específico.

Palabras clave numéricas
  • responsetime: tiempo que tardó el servidor en enviar una respuesta.

  • duration: duración total de la solicitud, incluidas las llamadas posteriores.

  • http.status: código de estado de respuesta.

  • index: posición de un elemento en una lista.

  • coverage: porcentaje decimal del tiempo de respuesta de una entidad con respecto al tiempo de respuesta del segmento raíz. Aplicable únicamente a las entidades de causa raíz de tiempo de respuesta.

Operadores numéricos

Las palabras clave numéricas usan los operadores de comparación y de igualdad estándar.

  • =,!=: la palabra clave es igual o no a un valor numérico.

  • <,<=, >,>=: la palabra clave es menor o igual a un valor numérico.

ejemplo – el estado de respuesta no es 200 OK
http.status != 200
ejemplo – solicitud con duración total de 5 a 8 segundos
duration >= 5 AND duration <= 8
ejemplo – solicitudes que se completaron sin errores en menos de 3 segundos, incluidas todas las llamadas posteriores
ok !partial duration <3
ejemplo – entidad de lista enumerada que tiene un índice mayor que 5
rootcause.fault.service { index > 5 }
ejemplo : solicitudes en las que la última entidad tiene una cobertura superior a 0.8
rootcause.responsetime.entity { last and coverage > 0.8 }

Palabras clave de cadenas

Utilice cadenas de palabras clave para buscar trazas con un texto específico en los encabezados de las solicitudes o para encontrar un usuario específico. IDs

Palabras clave de cadenas
  • http.url— SolicitudURL.

  • http.method: método de solicitud.

  • http.useragent: cadena del agente de usuario de la solicitud.

  • http.clientip: dirección IP del solicitante.

  • user: valor del campo de usuario en cualquier segmento incluido en el registro de seguimiento.

  • name: el nombre de un servicio o excepción.

  • type: tipo de servicio.

  • message: mensaje de excepción.

  • availabilityzone: valor del campo availabilityzone de cualquier segmento incluido en el registro de seguimiento

  • instance.id: valor del campo de ID de instancia de cualquier segmento incluido en el registro de seguimiento

  • resource.arn— Valor del ARN campo de recursos en cualquier segmento de la traza.

Los operadores de cadena permiten encontrar valores iguales a un texto determinado o que contienen dicho texto. Estos valores se deben escribir siempre entre comillas.

Operadores de cadena
  • =,!=: la palabra clave es igual o no a un valor numérico.

  • CONTAINS: la palabra clave contiene una cadena concreta.

  • BEGINSWITH , ENDSWITH: la palabra clave comienza o termina con una cadena concreta.

ejemplo – filtro http.url
http.url CONTAINS "/api/game/"

Para probar si un registro de seguimiento incluye un campo, independientemente de su valor, compruebe si la cadena está vacía.

ejemplo – filtro user

Encuentra todos los rastros con el usuarioIDs.

user CONTAINS ""
ejemplo – seleccione los registros de seguimiento con una causa raíz de error que incluyan el servicio denominado "Auth"
rootcause.fault.service { name = "Auth" }
ejemplo – seleccione los registros de seguimiento con una causa raíz de tiempo de respuesta cuyo último servicio tenga un tipo de DynamoDB
rootcause.responsetime.service { last and type = "AWS::DynamoDB" }
ejemplo – seleccione los registros de seguimiento con una causa raíz de error cuya última excepción tenga el mensaje "access denied for account_id: 1234567890"
rootcause.fault.exception { last and message = "Access Denied for account_id: 1234567890"

Palabras clave complejas

Utilice palabras clave complejas para buscar solicitudes basadas en nombre del servicio, nombre de borde o valor de anotación. Para servicios y límites, puede especificar una expresión de filtro adicional que se aplica al servicio o al límite. Para anotaciones, puede filtrar por el valor de una anotación con una clave específica, utilizando operadores booleanos, numéricos o de cadena.

Palabras clave complejas
  • annotation[key]— Valor de una anotación con campo key. El valor de una anotación puede ser un booleano, un número o una cadena, por lo que puede utilizar cualquiera de estos tipos de operadores de comparación. Puede utilizar esta palabra clave en combinación con la palabra clave service o edge. Una clave de anotación que contenga puntos (puntos) debe estar entre corchetes ([]).

  • edge(source, destination) {filter}— Conexión entre servicios source y destination. Las llaves rizadas opcionales pueden contener una expresión de filtro que se aplique a los segmentos de esta conexión.

  • group.name / group.arn— El valor de la expresión de filtro de un grupo, al que se hace referencia mediante el nombre del grupo o el grupo. ARN

  • json— objeto de causa JSON raíz. Consulte Obtener datos de AWS X-Ray para ver los pasos para crear JSON entidades mediante programación.

  • service(name) {filter}— Servicio con nombre name. Los corchetes opcionales pueden contener una expresión de filtro que se aplique a los segmentos creados por el servicio.

Usa la palabra clave service para buscar los rastros de las solicitudes que lleguen a un nodo determinado del mapa de rastreo.

Los operadores de palabras clave complejas buscan segmentos en los que se haya establecido o no se haya establecido la clave especificada.

Operadores de palabras clave complejas
  • none: la expresión es verdadera si la palabra clave está establecida. Si la palabra clave es de tipo booleano, se evaluará en función del valor booleano.

  • !: la expresión es verdadera si la palabra clave no está establecida. Si la palabra clave es de tipo booleano, se evaluará en función del valor booleano.

  • =,!=: compara el valor de la palabra clave.

  • edge(source, destination) {filter}— Conexión entre servicios source y destination. Las llaves rizadas opcionales pueden contener una expresión de filtro que se aplique a los segmentos de esta conexión.

  • annotation[key]— Valor de una anotación con campo key. El valor de una anotación puede ser un booleano, un número o una cadena, por lo que puede utilizar cualquiera de estos tipos de operadores de comparación. Puede utilizar esta palabra clave en combinación con la palabra clave service o edge.

  • json— objeto de JSON causa raíz. Consulte Obtener datos de AWS X-Ray para ver los pasos para crear JSON entidades mediante programación.

Utilice la palabra clave service para buscar los rastros de las solicitudes que lleguen a un nodo determinado del mapa de rastreo.

ejemplo – filtro Service

Solicitudes que incluyen una llamada a api.example.com con un error (error de la serie 500).

service("api.example.com") { fault }

Puede excluir el nombre del servicio para aplicar un filtro de expresión a todos los nodos de su mapa de servicios.

ejemplo – filtro service

Solicitudes que hayan provocado un error en cualquier parte del mapa de rastreo.

service() { fault }

La palabra clave edge aplica una expresión de filtro a una conexión entre dos nodos.

ejemplo – filtro edge

Solicitud en la que el servicio api.example.com hizo una llamada a backend.example.com que resultó errónea.

edge("api.example.com", "backend.example.com") { error }

También puede utilizar el operador ! con las palabras clave service y edge para excluir un servicio o un límite de los resultados de otra expresión de filtro.

ejemplo – filtro service y de solicitud

Solicita dónde URL comienza http://api.example.com/ y contiene /v2/ pero no llega a un servicio denominadoapi.example.com.

http.url BEGINSWITH "http://api.example.com/" AND http.url CONTAINS "/v2/" AND !service("api.example.com")
ejemplo — filtro service y de tiempo de respuesta

Busque rastros en los que esté establecido http url y el tiempo de respuesta sea superior a 2 segundos.

http.url AND responseTime > 2

Para las anotaciones, puede llamar a todos los rastros en los que esté establecido annotation[key] o utilizar los operadores de comparación que correspondan al tipo de valor.

ejemplo – anotación con un valor de cadena

Las solicitudes con una anotación denominada gameid que tiene el valor de cadena "817DL6VO".

annotation[gameid] = "817DL6VO"
ejemplo – la anotación está establecida

Solicitudes que tienen establecida una anotación denominada age.

annotation[age]
ejemplo – la anotación no está establecida

Solicitudes que no tienen establecida una anotación denominada age.

!annotation[age]
ejemplo – anotación con un valor numérico

Solicitudes con una edad de anotación con valor numérico mayor que 29.

annotation[age] > 29
ejemplo – anotación en combinación con service o edge

service { annotation[request.id] = "917DL6VO" }
edge { source.annotation[request.id] = "916DL6VO" }
edge { destination.annotation[request.id] = "918DL6VO" }
ejemplo – grupo con usuario

Solicitudes en las que los rastros cumplan los criterios del filtro de grupo high_response_time (p. ej.responseTime > 3) y el nombre del usuario sea Alice.

group.name = "high_response_time" AND user = "alice"
ejemplo — JSON con entidad causante raíz

Solicitudes con entidades de causa raíz coincidentes.

rootcause.json = #[{ "Services": [ { "Name": "GetWeatherData", "EntityPath": [{ "Name": "GetWeatherData" }, { "Name": "get_temperature" } ] }, { "Name": "GetTemperature", "EntityPath": [ { "Name": "GetTemperature" } ] } ] }]

función id

Cuando se proporciona un nombre de servicio a las palabras clave service o edge, se obtienen resultados de todos los nodos que tienen ese nombre. Si desea filtrar de manera más precisa, puede utilizar la función id para especificar un tipo de servicio, además de un nombre, para diferenciar los nodos con el mismo nombre.

Utilice la función account.id para especificar una cuenta concreta para el servicio cuando consulte rastros de varias cuentas de una cuenta de supervisión.

id(name: "service-name", type:"service::type", account.id:"account-ID")

Puede utilizar la función id en lugar de un nombre de servicio en los filtros service y edge.

service(id(name: "service-name", type:"service::type")) { filter }
edge(id(name: "service-one", type:"service::type"), id(name: "service-two", type:"service::type")) { filter }

Por ejemplo, AWS Lambda las funciones dan como resultado dos nodos en el mapa de rastreo: uno para la invocación de la función y otro para el servicio Lambda. Los dos nodos tienen el mismo nombre pero son de diferente tipo. Un filtro service estándar permite encontrar registros de seguimiento para ambos.

ejemplo – filtro service

Solicitudes que incluyen un error en cualquier servicio denominado random-name.

service("function-name") { error }

Utilice la función id para limitar la búsqueda a los errores de la propia función, sin incluir los errores del servicio.

ejemplo – filtro service con la función id

Solicitudes que incluyen un error en un servicio denominado random-name de tipo AWS::Lambda::Function.

service(id(name: "random-name", type: "AWS::Lambda::Function")) { error }

Si desea buscar nodos por tipo, también puede excluir el nombre por completo.

ejemplo – filtro service con la función id y tipo de servicio

Solicitudes que incluyen un error en un servicio de tipo AWS::Lambda::Function.

service(id(type: "AWS::Lambda::Function")) { error }

Para buscar nodos para un nodo concreto Cuenta de AWS, especifique un ID de cuenta.

ejemplo – filtro service con función id e ID de cuenta

Solicitudes que incluyen un servicio dentro de un identificador de cuenta específico AWS::Lambda::Function.

service(id(account.id: "account-id"))