Conceptos de AWS X-Ray
Los servicios envían datos a AWS X-Ray como segmentos. A continuación, X-Ray agrupa los segmentos que tienen una solicitud en común en rastros. X-Ray procesa los rastros para generar un gráfico de servicios, que constituye una representación visual de la aplicación.
Conceptos
Segmentos
Los recursos informáticos en los que se ejecuta la lógica de su aplicación envían datos del trabajo en forma de segmentos. Un segmento incluye el nombre del recurso, detalles de la solicitud y detalles del trabajo realizado. Por ejemplo, cuando una solicitud HTTP llega a la aplicación, puede registrar datos sobre:
-
El host nombre de host, alias o dirección IP
-
La solicitud: método, dirección del cliente, ruta y agente de usuario
-
La respuesta: estado y contenido
-
El trabajo realizado: hora de inicio y finalización y subsegmentos
-
Problemas que se producen: errores, fallos y excepciones, incluida la captura automática de pilas de excepciones.
El SDK de X-Ray recopila información a partir de los encabezados de solicitud y respuesta, el código en su aplicación y de los metadatos sobre los recursos de AWS donde se ejecuta el kit. Puede elegir los datos que se recopilan. Para hacerlo, debe modificar la configuración o el código de la aplicación para instrumentar las solicitudes entrantes, las solicitudes posteriores y los clientes del SDK de AWS.
Solicitudes reenviadas
Si un equilibrador de carga u otro intermediario reenvía una solicitud a la aplicación, X-Ray toma la IP de cliente del encabezado X-Forwarded-For
de la solicitud en lugar de tomar la IP de origen del paquete IP. La IP de cliente que se graba para una solicitud reenviada puede estar falsificada, por lo que no se debe confiar en ella.
Puede utilizar el SDK de X-Ray para registrar información adicional como, por ejemplo, anotaciones y metadatos. Para obtener más información sobre la estructura y la información que se registra en los segmentos y subsegmentos, consulte Documentos de segmentos de AWS X-Ray. Los documentos de segmento pueden tener un tamaño de hasta 64 kB.
Subsegmentos
Un segmento puede desglosar los datos del trabajo realizado en subsegmentos. Los subsegments proporcionan información y detalles más precisos sobre los intervalos de las llamadas posteriores que la aplicación realizó para cumplir la solicitud original. Un subsegmento puede contener detalles adicionales sobre una llamada a un Servicio de AWS, una API HTTP externa, o una base de datos SQL. Puede incluso definir subsegmentos arbitrarios para instrumentar funciones específicas o líneas de código en su aplicación.
En el caso de los servicios que no envían sus propios segmentos, como Amazon DynamoDB, X-Ray utiliza subsegmentos para generar segmentos inferidos y nodos posteriores en el mapa de rastros. Esto le permite ver todas sus dependencias posteriores, incluso si no soportan el rastreo o son externas.
Los subsegmentos representan la vista de su aplicación de una llamada posterior como cliente. Si el servicio posterior también está instrumentado, el segmento que envía sustituye al segmento inferido generado desde el subsegmento del cliente principal. El nodo en el gráfico de servicio utiliza siempre información desde el segmento del servicio, si está disponible, mientras que el límite entre los dos nodos utiliza el subsegmento del servicio ascendente.
Por ejemplo, si llama a DynamoDB con un cliente instrumentado del SDK de AWS, el SDK de X-Ray registra un subsegmento para dicha llamada. DynamoDB no envía un segmento, por lo que el segmento inferido en el rastro, el nodo de DynamoDB en el gráfico de servicio y el borde entre su servicio y DynamoDB contienen información del subsegmento.
Si llama a otro servicio instrumentado con una aplicación instrumentada, el servicio posterior envía su propio segmento para registrar su vista de la misma llamada que el servicio ascendente registró en un subsegmento. En el gráfico de servicio, los nodos de ambos servicios contienen información de tiempo y error de los segmentos de dichos servicios, mientras que el límite entre ellos contiene información del subsegmento del servicio ascendente.
Ambos puntos de vista son útiles, ya que el servicio posterior registra precisamente cuándo comenzó y finalizó el trabajo en la solicitud y el servicio ascendente registra la latencia de ida y vuelta, incluido el tiempo que la solicitud ha pasado viajando entre los dos servicios.
Gráfico de servicios
X-Ray utiliza los datos que su aplicación envía para generar un gráfico de servicios. Cada recurso de AWS que envía datos a X-Ray aparece como un servicio en el gráfico. Los límites conectan los servicios que trabajan en equipo para atender solicitudes. Los límites conectan a los clientes con la aplicación, y conectan la aplicación con los servicios y recursos posteriores que esta utiliza.
Nombres de servicio
El name
de un segmento debe coincidir con el nombre de dominio o el nombre lógico del servicio que genere el segmento. Sin embargo, este requisito no se exige. Cualquier aplicación que tenga permiso para PutTraceSegments
puede enviar segmentos con cualquier nombre.
Un gráfico de servicios es un documento JSON que contiene información acerca de los servicios y recursos que componen la aplicación. La consola de X-Ray utiliza el gráfico de servicios para generar una visualización o un mapa de servicio.
En las aplicaciones distribuidas, X-Ray combina nodos de todos los servicios que procesan solicitudes con el mismo ID de rastro en un único gráfico de servicios. El primer servicio al que llega la solicitud añade un encabezado de rastro que se propaga entre el front-end y servicios que a los llama.
Por ejemplo, Scorekeep ejecuta una API web que llama a un microservicio (una función de AWS Lambda) para generar un nombre aleatorio usando una biblioteca Node.js. El SDK de X-Ray para Java genera el ID de rastro y lo incluye en las llamadas a Lambda. Lambda envía datos de rastreo y transfiere el ID de rastro a la función. El SDK de X-Ray para Node.js también utiliza el ID de rastro para enviar datos. En consecuencia, el mapa de rastros muestra los nodos de la API, el servicio de Lambda y la función de Lambda como nodos independientes pero conectados.
Los datos del gráfico de servicio se conservan durante 30 días.
Rastros
El ID de rastro muestra la ruta que recorre una solicitud en la aplicación. Un registro de seguimiento recopila todos los segmentos que genera una solicitud. La solicitud suele ser una solicitud GET o una solicitud POST de HTTP que viaja a través de un equilibrador de carga, llega a su código de aplicación y genera llamadas posteriores a otros servicios de AWS o API web externas. El primer servicio compatible con el que interactúa la solicitud HTTP le añade un encabezado de ID de rastro, que continúa propagándose para registrar la latencia, la disposición y otros datos que requiere la solicitud.
Consulte Precios de AWS X-Ray
Muestreo
Para garantizar un rastreo eficaz y proporcionar una muestra representativa de las solicitudes que su aplicación atiende, el SDK de X-Ray aplica un algoritmo de muestreo para determinar qué solicitudes se rastrearán. De forma predeterminada, el SDK de X-Ray registra la primera solicitud cada segundo y el 5 % de las solicitudes adicionales.
Para evitar incurrir en cargos por servicio al empezar, la tasa de muestreo predeterminada es conservadora. Puede configurar X-Ray para modificar la regla de muestreo predeterminada y configurar reglas adicionales que aplican el muestreo en función de las propiedades del servicio o solicitud.
Por ejemplo, es posible que desee deshabilitar las solicitudes de muestreo y rastreo completo para las llamadas que modifican el estado o tratar con usuarios o transacciones. Para llamadas de solo lectura de alto volumen, como sondeo en segundo plano, comprobaciones de estado o mantenimiento de conexión, puede muestrear con un bajo índice y seguirá obteniendo datos suficientes para ver los problemas que surjan.
Para obtener más información, consulte Configuración de reglas de muestreo de .
Encabezado de seguimiento
Todas las solicitudes se rastrean hasta alcanzar un mínimo configurable, después de lo cual se rastrea un porcentaje de solicitudes para evitar un costo innecesario. La decisión de muestreo y el ID de rastro se añaden a las solicitudes HTTP en los encabezados de rastreo denominados X-Amzn-Trace-Id
. El primer servicio integrado en X-Ray, al que llega la solicitud añade un identificador de rastreo, que es leído por el SDK de X-Ray, e incluido en la respuesta.
ejemplo Encabezado de rastreo con ID de rastro raíz y decisión de muestreo
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1
Seguridad del encabezado de rastreo
Un encabezado de rastro se puede tener su origen en el SDK de X-Ray, un Servicio de AWS, o la solicitud del cliente. Su aplicación puede eliminar el encabezado X-Amzn-Trace-Id
en las solicitudes entrantes para evitar los problemas causados por usuarios que agregan ID de rastro o decisiones de muestreo a sus solicitudes.
El encabezado de rastreo también pueden contener un ID de segmento primario si la solicitud se originó a partir de una aplicación instrumentada. Por ejemplo, si su aplicación llama a una API web HTTP posterior con un cliente HTTP instrumentado, el SDK de X-Ray añade el ID del segmento de la solicitud original al encabezado de rastreo de la solicitud posterior. Una aplicación instrumentada que atiende la solicitud posterior puede registrar el ID del segmento primario para conectar ambas solicitudes.
ejemplo Encabezado de rastreo con ID de rastro raíz, ID de segmento primario y decisión de muestreo
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1
Lambda y otros Servicios de AWS pueden adjuntar Lineage
al encabezado de rastro como parte de sus mecanismos de procesamiento y no debe usarse directamente.
ejemplo Encabezado de rastreo con Lineage
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1;Lineage=a87bd80c:1|68fd508a:5|c512fbe3:2
Expresiones de filtro
Aunque se haya realizado un muestreo, una aplicación genera grandes cantidades de datos. La consola de AWS X-Ray ofrece una vista fácil de navegar del gráfico de servicio. Allí se muestra información sobre el estado y el rendimiento con la cual se puede identificar problemas y posibilidades de optimización en su aplicación. Cuando se realiza un rastreo avanzado, puede explorar en profundidad en busca de solicitudes individuales, o bien utilizar expresiones de filtro para encontrar rastros relacionados con rutas específicas o usuarios específicos.
Grupos
Como complemento de las expresiones de filtro, X-Ray también admite la característica de grupos. Mediante una expresión de filtro, puede definir los criterios para aceptar los rastros en el grupo.
Puede llamar al grupo por nombre o por nombre de recurso de Amazon (ARN) para generar su propio gráfico de servicios, resúmenes de rastros y métricas de Amazon CloudWatch. Una vez que se crea un grupo, los rastros de entrada se comparan con la expresión de filtro del grupo a medida que se almacenan en el servicio de X-Ray. Las métricas para el número de rastros que coinciden con cada criterio se publican en CloudWatch cada minuto.
La actualización de la expresión de filtro de un grupo no cambia los datos que ya se han registrado. La actualización se aplica únicamente a los rastros posteriores. Esto puede dar lugar a un gráfico que combina la expresión nueva con la anterior. Para evitarlo, elimine el grupo actual y cree uno nuevo.
nota
Los grupos se facturan por el número de rastros recuperados que coinciden con la expresión de filtro. Para más información, consulte Precios de AWS X-Ray
Para obtener más información acerca de los grupos, consulte Configuración de grupos.
Anotaciones y metadatos
Cuando instrumenta su aplicación, el SDK de X-Ray registra información acerca de las solicitudes entrantes y de salida, los recursos de AWS utilizados y la aplicación en sí. Puede añadir más información al documento de segmento, por ejemplo anotaciones y metadatos. Las anotaciones y los metadatos se agregan en el nivel de seguimiento y se pueden añadir a cualquier segmento o subsegmento.
Las anotaciones son pares de clave-valor que se indexan para usarlos en expresiones de filtro. Utilice anotaciones para registrar los datos que desee utilizar para agrupar rastros en la consola o cuando llame a la API de GetTraceSummaries
.
X-Ray indexa hasta 50 anotaciones por rastro.
Los metadatos son pares de clave-valor con valores de cualquier tipo, por ejemplo objetos y listas, pero que no se indexan. Utilice los metadatos para registrar los datos que desee almacenar en el rastro, pero que no vaya a usar para buscar rastros.
Puede ver anotaciones y metadatos en la ventana de los detalles de segmento o subsegmento, en la página Detalles de rastro de la consola de CloudWatch.
Errores y excepciones
X-Ray rastrea los errores que se producen en su código de aplicación y los errores que devuelven los servicios posteriores. Los errores se clasifican como se indica a continuación.
-
Error
: errores del cliente (errores de la serie 400) -
Fault
: errores del servidor (errores de la serie 500) -
Throttle
: errores de limitación controlada (429: demasiadas solicitudes)
Cuando se produce una excepción, mientras la aplicación está sirviendo una solicitud instrumentada, el SDK de X-Ray registra detalles sobre la excepción, incluido el rastro de pila, si está disponible. Puede ver excepciones en detalles de segmento en la consola de X-Ray.