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.
Configuración de X-Ray SDK para Java
X-Ray SDK para Java incluye una clase denominada AWSXRay
que proporciona la grabadora global. Esto es un TracingHandler
que puede utilizar para instrumentar su código. Puede configurar la grabadora global para personalizar la AWSXRayServletFilter
que crea segmentos para las HTTP llamadas entrantes.
Secciones
Complementos del servicio
Utilice plugins
para registrar información sobre el servicio que aloja la aplicación.
Complementos
AmazonEC2:
EC2Plugin
agrega el ID de la instancia, la zona de disponibilidad y el grupo de CloudWatch registros.Elastic Beanstalk:
ElasticBeanstalkPlugin
añade el nombre de entorno, la etiqueta de versión y el ID de implementación.AmazonECS:
ECSPlugin
añade el identificador del contenedor.AmazonEKS:
EKSPlugin
añade el ID del contenedor, el nombre del clúster, el ID del pod y el grupo de CloudWatch registros.
Para utilizar un complemento, llame a withPlugin
en su AWSXRayRecorderBuilder
.
ejemplo src/main/java/scorekeep/ .javaWebConfig: grabadora
import com.amazonaws.xray.AWSXRay;
import com.amazonaws.xray.AWSXRayRecorderBuilder;
import com.amazonaws.xray.plugins.EC2Plugin;
import com.amazonaws.xray.plugins.ElasticBeanstalkPlugin;
import com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy;
@Configuration
public class WebConfig {
...
static {
AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard().withPlugin(new EC2Plugin()).withPlugin(new ElasticBeanstalkPlugin());
URL ruleFile = WebConfig.class.getResource("/sampling-rules.json");
builder.withSamplingStrategy(new LocalizedSamplingStrategy(ruleFile));
AWSXRay.setGlobalRecorder(builder.build());
}
}
SDKTambién utiliza la configuración del complemento para configurar el campo en el segmento. origin
Esto indica el tipo de AWS recurso que ejecuta la aplicación. Cuando utilizas varios complementos, SDK utiliza el siguiente orden de resolución para determinar el origen: ElasticBeanstalk > EKS > ECS >EC2.
Reglas de muestreo
SDKUtiliza las reglas de muestreo que se definen en la consola de X-Ray para determinar qué solicitudes se van a registrar. La regla predeterminada rastrea la primera solicitud cada segundo y el 5 % de las solicitudes adicionales de todos los servicios que envían rastros a X-Ray. Cree reglas adicionales en la consola de X-Ray para personalizar la cantidad de datos registrados para cada una de sus aplicaciones.
SDKAplica las reglas personalizadas en el orden en que se definen. Si una solicitud coincide con varias reglas personalizadas, solo SDK se aplica la primera regla.
nota
Si no SDK puede comunicarse con X-Ray para obtener las reglas de muestreo, vuelve a la regla local predeterminada de la primera solicitud cada segundo y el cinco por ciento de las solicitudes adicionales por host. Esto puede ocurrir si el anfitrión no tiene permiso para llamar al muestreo APIs o no puede conectarse al daemon X-Ray, que actúa como TCP proxy de las API llamadas realizadas por elSDK.
También puede configurarlas SDK para que carguen las reglas de muestreo desde un JSON documento. SDKPueden usar las reglas locales como respaldo en los casos en que el muestreo de rayos X no esté disponible, o usar las reglas locales exclusivamente.
ejemplo sampling-rules.json
{
"version": 2,
"rules": [
{
"description": "Player moves.",
"host": "*",
"http_method": "*",
"url_path": "/api/move/*",
"fixed_target": 0,
"rate": 0.05
}
],
"default": {
"fixed_target": 1,
"rate": 0.1
}
}
En este ejemplo se define una regla personalizada y una regla predeterminada. La regla personalizada aplica un porcentaje de muestreo del 5 % sin un número mínimo de solicitudes de rastreo para las rutas incluidas bajo /api/move/
. La regla predeterminada rastrea la primera solicitud cada segundo y el 10 % de las solicitudes adicionales.
La desventaja de definir las reglas localmente es que el objetivo establecido lo aplica cada instancia de la grabadora de forma independiente, en lugar de ser administrado por el servicio de X-Ray. A medida que se implementan más hosts, el porcentaje establecido se multiplica, lo que dificulta el control de la cantidad de datos registrados.
Activado AWS Lambda, no se puede modificar la frecuencia de muestreo. Si un servicio instrumentado llama a su función, Lambda registrará las llamadas que generaron solicitudes muestreadas por ese servicio. Si el rastreo activo está activado y no hay ningún encabezado de rastreo, Lambda toma la decisión de muestreo.
Para proporcionar reglas de copia de seguridad en Spring, configure la grabadora global con una CentralizedSamplingStrategy
en una clase de configuración:
ejemplo WebConfigsrc/main/java/myapp/ .java: configuración de la grabadora
import com.amazonaws.xray.AWSXRay;
import com.amazonaws.xray.AWSXRayRecorderBuilder;
import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter;
import com.amazonaws.xray.plugins.EC2Plugin;
import com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy;
@Configuration
public class WebConfig {
static {
AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard().withPlugin(new EC2Plugin());
URL ruleFile = WebConfig.class.getResource("/sampling-rules.json");
builder.withSamplingStrategy(new CentralizedSamplingStrategy(ruleFile));
AWSXRay.setGlobalRecorder(builder.build());
}
Para Tomcat, añada un agente de escucha que amplíe ServletContextListener
y registre el agente de escucha en el descriptor de la implementación.
ejemplo src/com/myapp/web/Startup.java
import com.amazonaws.xray.AWSXRay;
import com.amazonaws.xray.AWSXRayRecorderBuilder;
import com.amazonaws.xray.plugins.EC2Plugin;
import com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy;
import java.net.URL;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class Startup implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard().withPlugin(new EC2Plugin());
URL ruleFile = Startup.class.getResource("/sampling-rules.json");
builder.withSamplingStrategy(new CentralizedSamplingStrategy(ruleFile));
AWSXRay.setGlobalRecorder(builder.build());
}
@Override
public void contextDestroyed(ServletContextEvent event) { }
}
ejemplo WEB- /web.xml INF
...
<listener>
<listener-class>com.myapp.web.Startup</listener-class>
</listener>
Para utilizar reglas locales solo, reemplace la CentralizedSamplingStrategy
por LocalizedSamplingStrategy
.
builder.withSamplingStrategy(new
LocalizedSamplingStrategy
(ruleFile));
Registro
De forma predeterminada, SDK envía mensajes ERROR
de nivel A a los registros de la aplicación. Puede habilitar el registro a nivel de depuración SDK para generar registros más detallados en el archivo de registro de la aplicación. Los niveles de registro válidos son DEBUG
INFO
, WARN
ERROR
, y. FATAL
FATAL
el nivel de registro silencia todos los mensajes de registro porque SDK no se registra a un nivel fatal.
ejemplo application.properties
Configure el nivel de registro con la propiedad logging.level.com.amazonaws.xray
.
logging.level.com.amazonaws.xray = DEBUG
Utilice registros de depuración para identificar problemas como la presencia de subsegmentos sin cerrar al generar subsegmentos de forma manual.
Inyección de ID de registro de seguimiento en los registros
Para mostrar el identificador de rastreo completo actual en sus declaraciones de registro, puede introducir el identificador en el contexto de diagnóstico mapeado (). MDC Mediante la interfaz SegmentListener
, se llama a los métodos desde la grabadora de X-Ray durante los eventos del ciclo de vida del segmento. Cuando comienza un segmento o subsegmento, el identificador de rastreo cualificado se inserta junto MDC con la clave. AWS-XRAY-TRACE-ID
Cuando ese segmento termina, la clave se elimina delMDC. Esto expone el ID de registro de seguimiento a la biblioteca de registro en uso. Cuando un subsegmento termina, su ID principal se inyecta en elMDC.
ejemplo ID de seguimiento completo
El ID completo se representa como TraceID@EntityID
1-5df42873-011e96598b447dfca814c156@541b3365be3dafc3
Esta función funciona con aplicaciones Java equipadas con AWS X-Ray SDK for Java y admite las siguientes configuraciones de registro:
-
SLF4Jfront-end API con backend Logback
-
SLF4Jfront-end con backend Log4J2 API
-
Interfaz Log4J2 con backend Log4J2 API
Consulte las siguientes pestañas para conocer las necesidades de cada front end y backend.
Ejemplo de inyección de ID de registro de seguimiento
A continuación se muestra una cadena de PatternLayout
modificada para incluir el ID de registro de seguimiento. El ID de registro de seguimiento se imprime después del nombre del subproceso (%t
) y antes del nivel de registro (%-5p
).
ejemplo PatternLayout
Con inyección de ID
%d{HH:mm:ss.SSS} [%t]
%X{AWS-XRAY-TRACE-ID}
%-5p %m%n
AWS X-Ray imprime automáticamente la clave y el ID de rastreo en la declaración de registro para facilitar el análisis. A continuación se muestra una instrucción de registro que utiliza el PatternLayout
modificado.
ejemplo Instrucción de registro con inyección de ID
2019-09-10 18:58:30.844 [nio-5000-exec-4]
AWS-XRAY-TRACE-ID
: 1-5d77f256-19f12e4eaa02e3f76c78f46a@1ce7df03252d99e1 WARN 1 -Your logging message here
El mensaje de registro en sí está alojado en el patrón %m
y se establece al llamar al registrador.
Agentes de escucha de segmento
Los detectores de segmentos son una interfaz para interceptar eventos del ciclo de vida, como el principio y el final de los segmentos producidos por el. AWSXRayRecorder
La implementación de una función de escucha de segmentos puede consistir en añadir la misma anotación a todos los subsegmentos cuando se crean con ellos onBeginSubsegment
, registrar un mensaje después de enviar cada segmento al daemon o registrar las consultas enviadas por los SQL interceptores beforeEndSubsegment
para comprobar si el subsegmento representa una SQL consulta afterEndSegment
, añadiendo metadatos adicionales en caso afirmativo.
En el ejemplo siguiente se muestra cómo agregar una anotación coherente a todos los subsegmentos al crear con onBeginSubsegment
e imprimir un mensaje de registro al final de cada segmento con afterEndSegment
.
ejemplo MySegmentListener.java
import com.amazonaws.xray.entities.Segment;
import com.amazonaws.xray.entities.Subsegment;
import com.amazonaws.xray.listeners.SegmentListener;
public class MySegmentListener implements SegmentListener {
.....
@Override
public void onBeginSubsegment(Subsegment subsegment) {
subsegment.putAnnotation("annotationKey
", "annotationValue
");
}
@Override
public void afterEndSegment(Segment segment) {
// Be mindful not to mutate the segment
logger.info("Segment with ID " + segment.getId()
);
}
}
A continuación, se hace referencia a este agente de escucha de segmento personalizado cuando se crea AWSXRayRecorder
.
ejemplo AWSXRayRecorderBuilder declaración
AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder
.standard().withSegmentListener(new MySegmentListener()
);
Variables de entorno
Puede usar variables de entorno para configurar el X-Ray SDK para Java. SDKAdmite las siguientes variables.
AWS_XRAY_CONTEXT_MISSING
: establezca esta opción enRUNTIME_ERROR
para generar excepciones cuando el código instrumentado intente registrar datos sin que haya ningún segmento abierto.Valores válidos
-
RUNTIME_ERROR
: lance una excepción de tiempo de ejecución. -
LOG_ERROR
: registre un error y continúe (predeterminado). -
IGNORE_ERROR
: ignore el error y continúe.
Se pueden producir errores relativos a segmentos o subsegmentos inexistentes al intentar usar un cliente instrumentado en el código de inicio que se ejecuta cuando no hay ninguna solicitud abierta o en el código que inicia un nuevo subproceso.
-
AWS_XRAY_DAEMON_ADDRESS
: establezca el host y el puerto del oyente del daemon de X-Ray. De forma predeterminada, se SDK utiliza tanto127.0.0.1:2000
para los datos de rastreo (UDP) como para el muestreo (TCP). Use esta variable si ha configurado el daemon para que escuche en un puerto diferente o si se ejecuta en un host diferente.Formato
-
El mismo puerto:
address
:port
-
Puertos diferentes:
tcp:
address
:port
udp:address
:port
-
-
AWS_LOG_GROUP
— Defina el nombre de un grupo de registros como el grupo de registros asociado a su aplicación. Si su grupo de registros usa la misma AWS cuenta y región que su aplicación, X-Ray buscará automáticamente los datos de los segmentos de su aplicación utilizando este grupo de registros especificado. Para obtener más información sobre los grupos de registros, consulte Trabajar con grupos de registros y flujos. -
AWS_XRAY_TRACING_NAME
— Establezca un nombre de servicio que se SDK utilice para los segmentos. Anula el nombre de servicio que se ha establecido en la estrategia de nomenclatura de segmento del filtro de servlet.
Las variables de entorno anulan las propiedades de sistema equivalentes y los valores establecidos en el código.
Propiedades del sistema
Puede utilizar las propiedades del sistema como una alternativa JVM específica a las variables de entorno. SDKSoporta las siguientes propiedades:
-
com.amazonaws.xray.strategy.tracingName
: equivalente aAWS_XRAY_TRACING_NAME
. -
com.amazonaws.xray.emitters.daemonAddress
: equivalente aAWS_XRAY_DAEMON_ADDRESS
. -
com.amazonaws.xray.strategy.contextMissingStrategy
: equivalente aAWS_XRAY_CONTEXT_MISSING
.
Si se ha establecido tanto una propiedad del sistema y como su variable de entorno equivalente, se utiliza el valor de la variable de entorno. En cualquier caso, esos valores anulan los valores establecidos en el código.