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.
Agente de instrumentación automática de AWS X-Ray para Java
El agente de AWS X-Ray autoinstrumentación para Java es una solución de rastreo que instrumenta sus aplicaciones web Java con un mínimo esfuerzo de desarrollo. El agente permite rastrear las aplicaciones basadas en servlets y todas las solicitudes posteriores del agente realizadas con marcos y bibliotecas compatibles. Esto incluye HTTP las solicitudes y SQL consultas posteriores de AWS SDK Apache realizadas mediante un controlador. JDBC El agente propaga el contexto de X-Ray, incluidos todos los segmentos y subsegmentos activos, a través de subprocesos. Todas las configuraciones y la versatilidad del X-Ray SDK siguen estando disponibles con el agente Java. Se eligieron los valores predeterminados adecuados para garantizar que el agente funcione con el mínimo esfuerzo.
Lo más adecuado para la solución del agente de X-Ray son los servidores de aplicaciones web Java de solicitud-respuesta basados en servlets. Si su aplicación utiliza un marco asíncrono o no está bien diseñado como un servicio de solicitud-respuesta, puede que prefiera considerar la instrumentación manual con él. SDK
El agente X-Ray se creó con el kit de herramientas de comprensión de sistemas distribuidos, o D. iSCo D iSCo es un marco de código abierto para crear agentes Java que se pueden usar en sistemas distribuidos. Si bien no es necesario comprender D iSCo para usar el agente de rayos X, puede obtener más información sobre el proyecto visitando su página de inicio en GitHub
Aplicación de muestra
La aplicación eb-java-scorekeep
Introducción
Para empezar a utilizar el agente de instrumentación automática de X-Ray para Java en su propia aplicación, siga estos pasos.
-
Ejecute el daemon de X-Ray en su entorno. Para obtener más información, consulte AWS X-Ray demonio.
-
Descargue la última distribución del agente
. Descomprima el archivo y tome nota de su ubicación en el sistema de archivos. El contenido debe ser similar al siguiente. disco ├── disco-java-agent.jar └── disco-plugins ├── aws-xray-agent-plugin.jar ├── disco-java-agent-aws-plugin.jar ├── disco-java-agent-sql-plugin.jar └── disco-java-agent-web-plugin.jar
-
Modifique los JVM argumentos de su solicitud para incluir lo siguiente, lo que habilitará al agente. Asegúrese de que el argumento
-javaagent
esté colocado delante del argumento-jar
, si procede. El proceso de modificación de JVM los argumentos varía en función de las herramientas y los marcos que utilice para lanzar el servidor Java. Consulte la documentación del marco de su servidor para obtener orientación específica.-javaagent:/<path-to-disco>/disco-java-agent.jar=pluginPath=/<path-to-disco>/disco-plugins
-
Para especificar cómo aparece el nombre de la aplicación en la consola de X-Ray, establezca la variable de entorno
AWS_XRAY_TRACING_NAME
o la propiedad de sistemacom.amazonaws.xray.strategy.tracingName
. Si no se proporciona un nombre, se utilizará un nombre predeterminado. -
Reinicie el servidor o el contenedor. A partir de ese momento se rastrearán las solicitudes entrantes y sus llamadas posteriores. Si no ve los resultados esperados, consulte Resolución de problemas.
Configuración
El agente X-Ray se configura mediante un JSON archivo externo proporcionado por el usuario. De forma predeterminada, este archivo se encuentra en la raíz de la ruta de clases del usuario denominada xray-agent.json
(por ejemplo, en su directorio resources
). Puede configurar una ubicación personalizada para el archivo de configuración estableciendo la propiedad de sistema com.amazonaws.xray.configFile
en la ruta absoluta del sistema de archivos del archivo de configuración.
A continuación, se muestra un ejemplo de archivo de configuración.
{ "serviceName": "XRayInstrumentedService", "contextMissingStrategy": "LOG_ERROR", "daemonAddress": "127.0.0.1:2000", "tracingEnabled": true, "samplingStrategy": "CENTRAL", "traceIdInjectionPrefix": "prefix", "samplingRulesManifest": "/path/to/manifest", "awsServiceHandlerManifest": "/path/to/manifest", "awsSdkVersion": 2, "maxStackTraceLength": 50, "streamingThreshold": 100, "traceIdInjection": true, "pluginsEnabled": true, "collectSqlQueries": false }
Especificación de la configuración
En la tabla siguiente se describen valores válidos para cada propiedad. Los nombres de las propiedades hay distinción entre mayúsculas y minúsculas, pero en sus claves no. En el caso de propiedades que las variables de entorno y las propiedades del sistema pueden anular, el orden de prioridad es siempre el siguiente: primero la variable de entorno, luego la propiedad del sistema y, por último, el archivo de configuración. Para obtener información sobre las propiedades que puede anular, consulte. Variables de entorno Todos los campos son opcionales.
Nombre de la propiedad | Tipo | Valores válidos | Descripción | Variable de entorno | Propiedad del sistema | Predeterminado |
---|---|---|---|---|---|---|
serviceName |
Cadena |
Cualquier cadena |
El nombre del servicio instrumentado tal como aparecerá en la consola de X-Ray. |
AWS_XRAY_TRACING_NAME |
com.amazonaws.xray.strategy. tracingName |
XRayInstrumentedService |
contextMissingStrategy |
Cadena |
LOG_ERROR, IGNORE_ERROR |
La acción que realiza el agente cuando intenta utilizar el contexto del segmento de X-Ray, pero no hay ninguno. |
AWS_XRAY_CONTEXT_MISSING |
com.amazonaws.xray.strategy. contextMissingStrategy |
LOG_ERROR |
daemonAddress |
Cadena |
Dirección IP y puerto formateados, o lista TCP de UDP direcciones |
La dirección que utiliza el agente para comunicarse con el daemon de X-Ray. |
AWS_XRAY_DAEMON_ADDRESS |
com.amazonaws.xray.emitter. daemonAddress |
127.0.0. 1:2000 |
tracingEnabled |
Booleano |
True, False |
Permite la instrumentación mediante el agente de X-Ray. |
AWS_XRAY_TRACING_ENABLED |
com.amazonaws.xray. tracingEnabled |
TRUE |
samplingStrategy |
Cadena |
CENTRAL, LOCAL, NONE, ALL |
La estrategia de muestreo que utiliza el agente. ALLcaptura todas las solicitudes, no NONE captura ninguna solicitud. Consulte Reglas de muestreo. |
N/A |
N/A |
CENTRAL |
traceIdInjectionPrefijo |
Cadena |
Cualquier cadena |
Incluye el prefijo proporcionado antes de inyectar la traza IDs en los registros. |
N/A |
N/A |
Ninguno (cadena vacía) |
samplingRulesManifest |
Cadena |
Ruta de archivo absoluta |
La ruta a un archivo de reglas de muestreo personalizadas que se utilizará como fuente de las reglas de muestreo para la estrategia de muestreo local o las reglas alternativas para la estrategia central. |
N/A |
N/A |
|
awsServiceHandlerManifiesto |
Cadena |
Ruta de archivo absoluta |
La ruta a una lista de parámetros permitidos personalizada, que captura información adicional de AWS SDK los clientes. |
N/A |
N/A |
|
awsSdkVersion |
Entero |
1, 2 |
Versión de la versión AWS SDKpara Java que estás usando. Se ignora si no se establece también |
N/A |
N/A |
2 |
maxStackTraceLongitud |
Entero |
Enteros no negativos |
El número máximo de líneas de un rastro de pila que se pueden registrar en una traza. |
N/A |
N/A |
50 |
streamingThreshold |
Entero |
Enteros no negativos |
Una vez cerrados al menos este número de subsegmentos, se transmiten al daemon out-of-band para evitar que los fragmentos sean demasiado grandes. |
N/A |
N/A |
100 |
traceIdInjection |
Booleano |
True, False |
Permite la inyección de los ID de rastro de X-Ray en los registros si también se agregan las dependencias y la configuración descritas en la configuración de registro. De lo contrario, no hace nada. |
N/A |
N/A |
TRUE |
pluginsEnabled |
Booleano |
True, False |
Habilita los complementos que registran los metadatos sobre los AWS entornos en los que se opera. Consulte Complementos de servicio. |
N/A |
N/A |
TRUE |
collectSqlQueries |
Booleano |
True, False |
Registra las cadenas de SQL consulta en SQL subsegmentos según el mejor esfuerzo posible. |
N/A |
N/A |
FALSE |
contextPropagation |
Booleano |
True, False |
Propaga automáticamente el contexto de X-Ray entre subprocesos si es verdadero. De lo contrario, utiliza Thread Local para almacenar el contexto y se requiere la propagación manual de un subproceso a otro. |
N/A |
N/A |
TRUE |
Configuración de registro
El nivel de registro del agente de X-Ray se puede configurar de la misma manera que el X-Ray SDK para Java. Consulte Registro para obtener más información sobre la configuración del registro con X-Ray SDK para Java.
Instrumentación manual
Si desea realizar una instrumentación manual además de la autoinstrumentación del agente, añada el X-Ray SDK como una dependencia a su proyecto. Tenga en cuenta que los filtros SDK de servlet personalizados que se mencionan en Tracing Incoming Requests no son compatibles con el agente X-Ray.
nota
Debe utilizar la última versión del X-Ray SDK para realizar la instrumentación manual y, al mismo tiempo, utilizar el agente.
Si está trabajando en un proyecto de Maven, añada las siguientes dependencias a su archivo pom.xml
.
<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-core</artifactId> <version>2.11.0</version> </dependency> </dependencies>
Si está trabajando en un proyecto de Gradle, añada las siguientes dependencias a su archivo build.gradle
.
implementation 'com.amazonaws:aws-xray-recorder-sdk-core:2.11.0'
Puede añadir subsegmentos personalizados además de las anotaciones, los metadatos y el usuario IDs mientras utiliza el agente, tal y como haría normalmente. SDK El agente propaga automáticamente el contexto de un subproceso a otro, por lo que no deberían hacer falta soluciones provisionales para propagar el contexto cuando se trabaja con aplicaciones multiproceso.
Resolución de problemas
Como el agente ofrece una instrumentación totalmente automática, puede resultar difícil identificar la causa raíz de un problema cuando se están produciendo problemas. Si el agente de X-Ray no funciona según lo esperado, revise los siguientes problemas y soluciones. El agente de X-Ray y el SDK uso de Jakarta Commons Logging (JCL). Para ver el resultado del registro, asegúrese de que un puente que se conecte JCL a su servidor de registro esté en la ruta de clases, como en el siguiente ejemplo: o. log4j-jcl
jcl-over-slf4j
Problema: he habilitado el agente para Java en mi aplicación, pero no veo nada en la consola de X-Ray
¿El daemon de X-Ray se está ejecutando en la misma máquina?
Si no es así, consulte la documentación del daemon de X-Ray para configurarlo.
¿Ve un mensaje similar a “Iniciando la grabadora del agente de X-Ray” en los registros de su aplicación?
Si ha agregado correctamente el agente a su aplicación, este mensaje se registra en el INFO nivel cuando se inicia la aplicación, antes de que comience a recibir solicitudes. Si este mensaje no aparece, significa que el agente para Java no se está ejecutando con el proceso de Java. Asegúrese de haber seguido todos los pasos de configuración correctamente sin errores tipográficos.
En los registros de su aplicación, ¿ve varios mensajes de error que digan algo así como «Suprimir la excepción por falta de AWS X-Ray contexto»?
Estos errores se producen porque el agente está intentando instrumentar solicitudes posteriores, como AWS SDK solicitudes o SQL consultas, pero no ha podido crear un segmento automáticamente. Si ve muchos de estos errores, es posible que el agente no sea la mejor herramienta para su caso de uso y, en su SDK lugar, tal vez desee considerar la instrumentación manual con el X-Ray. Como alternativa, puede habilitar los registros de SDK depuración de X-Ray para ver el seguimiento de la pila de dónde se producen las excepciones que faltan en el contexto. Puede agrupar estas porciones del código con segmentos personalizados, lo que debería corregir estos errores. Para ver un ejemplo de cómo encapsular las solicitudes posteriores con segmentos personalizados, consulte el código de muestra que aparece en Instrumentación de código de inicio.
Problema: algunos de los segmentos que espero no aparecen en la consola de X-Ray
¿Su aplicación utiliza el multiproceso?
Si espera que se creen ciertos segmentos pero no aparecen en la consola, la causa pueden ser subprocesos en segundo plano en la aplicación. Si su aplicación realiza tareas mediante subprocesos en segundo plano que son de tipo «activar y olvidar», como realizar una llamada puntual a una función de Lambda con AWS SDK la función Lambda o sondear HTTP algún punto final periódicamente, esto puede confundir al agente mientras propaga el contexto entre los subprocesos. Para comprobar que este es tu problema, activa los registros de SDK depuración de X-Ray y comprueba si hay mensajes como: No se emite el segmento denominado < NAME >, ya que origina los subsegmentos en curso. Para solucionar este problema, puede intentar unir los subprocesos en segundo plano antes de que el servidor vuelva a funcionar para asegurarse de que todo el trabajo realizado en ellos queda registrado. O bien, puede establecer la configuración contextPropagation
del agente en false
para inhabilitar la propagación del contexto en subprocesos en segundo plano. En ese caso, tendrá que instrumentar manualmente esos subprocesos con segmentos personalizados o ignorar las excepciones de falta de contexto que generen.
¿Ha establecido reglas de muestreo?
Si aparecen segmentos aparentemente aleatorios o inesperados en la consola de X-Ray, o los segmentos que esperaba que estuvieran en la consola no están, es posible que tenga un problema de muestreo. El agente de X-Ray lleva a cabo un muestreo centralizado en todos los segmentos que crea, aplicando las reglas de la consola de X-Ray. La regla por defecto es obtener muestras en 1 segmento por segundo y, posteriormente, en el 5 % de los segmentos. Eso significa que es posible que no se obtengan muestras de los segmentos que se creen rápidamente con el agente. Para solucionar este problema, debe crear reglas de muestreo personalizadas en la consola de X-Ray para un muestreo adecuado de los segmentos deseados. Para obtener más información, consulte Configuración de reglas de muestreo.