Suivi des demandes entrantes avec le kit SDK X-Ray pour Java - AWS X-Ray

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Suivi des demandes entrantes avec le kit SDK X-Ray pour Java

Vous pouvez utiliser le kit SDK X-Ray pour suivre les demandes HTTP entrantes servies par votre application sur une instance EC2 dans Amazon EC2,AWS Elastic Beanstalk, ou Amazon ECS.

Utilisez un Filter pour instrumenter les demandes HTTP entrantes. Lorsque vous ajoutez le filtre servlet X-Ray à votre application, le kit SDK X-Ray pour Java crée un segment pour chaque demande échantillonnée. Ce segment comprend la durée, la méthode et l'état de la demande HTTP. L'instrumentation supplémentaire crée des sous-segments sur ce segment.

Note

PourAWS Lambdafonctions, Lambda crée un segment pour chaque demande échantillonnée. Pour plus d'informations, consultez AWS Lambda et AWS X-Ray.

Chaque segment possède un nom qui identifie votre application dans la carte de service. Le segment peut être nommé de manière statique ou vous pouvez configurer le SDK pour le nommer dynamiquement en fonction de l'en-tête de l'hôte dans la demande entrante. La dénomination dynamique permet de regrouper les traces en fonction du nom de domaine dans la demande et d'appliquer un nom par défaut si le nom ne correspond pas à un modèle attendu (par exemple, si l'en-tête de l'hôte est falsifié).

Demandes transférées

Si un équilibreur de charge ou un autre intermédiaire transmet une demande à votre application, X-Ray prend l'adresse IP du client à partir duX-Forwarded-Foren-tête dans la requête au lieu de l'adresse IP source dans le paquet IP. L'adresse IP du client enregistrée pour une demande transférée peut être falsifié, elle ne doit donc pas être fiable.

Lorsqu'une demande est transférée, le kit SDK définit un champ supplémentaire dans le segment pour indiquer cela. Si le segment contient le champx_forwarded_forRéglez surtrue, l'adresse IP du client a été extraite duX-Forwarded-Foren-tête de la demande HTTP.

Le gestionnaire de messages crée un segment pour chaque demande entrante avec un bloc http contenant les informations suivantes :

  • HTTP method (Méthode HTTP)— GET, POST, PUT, DELETE, etc.

  • Adresse client— Adresse IP du client qui a envoyé la demande.

  • Code de réponse— Code de réponse HTTP pour la demande terminée.

  • Timing (Durée)— Heure de début (lorsque la demande est reçue) et l'heure de fin (lorsque la réponse est envoyée).

  • Agent utilisateur— Leuser-agentde la demande.

  • Longueur du contenu— Lecontent-lengthde la réponse.

Ajout d'un filtre de suivi à votre application (Tomcat)

Pour Tomcat, ajoutez un <filter> aux fichier web.xml de votre projet. Utilisez le paramètre fixedName pour spécifier un nom de service à appliquer aux segments créés pour les demandes entrantes.

Exemple WEB-INF/web.xml - Tomcat
<filter> <filter-name>AWSXRayServletFilter</filter-name> <filter-class>com.amazonaws.xray.javax.servlet.AWSXRayServletFilter</filter-class> <init-param> <param-name>fixedName</param-name> <param-value>MyApp</param-value> </init-param> </filter> <filter-mapping> <filter-name>AWSXRayServletFilter</filter-name> <url-pattern>*</url-pattern> </filter-mapping>

Ajout d'un filtre de suivi à votre application (Spring)

Pour Spring, ajoutez un Filter à votre classe WebConfig. Transmettez le nom du segment au constructeur AWSXRayServletFilter en tant que chaîne.

Exemple src/main/java/myapp/WebConfig.java - Spring
package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import javax.servlet.Filter; import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter("Scorekeep"); } }

Configuration d'une stratégie d'attribution de noms de segment

AWS X-Rayutilise unService namepour identifier votre application et la distinguer des autres applications, bases de données, API externes etAWSressources que votre application utilise. Lorsque le SDK X-Ray génère des segments pour les demandes entrantes, il enregistre le nom du service de votre application dans lechamp name.

Le SDK X-Ray peut nommer des segments après le nom d'hôte dans l'en-tête de la requête HTTP. Toutefois, cet en-tête peut être falsifié, ce qui peut entraîner des nœuds inattendus dans votre carte de service. Pour empêcher le SDK de nommer incorrectement les segments en raison de demandes comportant des en-têtes d'hôte falsifiés, vous devez spécifier un nom par défaut pour les demandes entrantes.

Si votre application répond à des demandes pour plusieurs domaines, vous pouvez configurer le SDK pour qu'il utilise une stratégie de dénomination dynamique qui reflète cela dans les noms de segments. Une stratégie de dénomination dynamique permet au SDK d'utiliser le nom d'hôte pour les demandes correspondant à un modèle attendu, et d'appliquer le nom par défaut aux demandes qui ne le font pas.

Prenons l'exemple d'une application unique servant des demandes à trois sous-domaines :www.example.com,api.example.com, etstatic.example.com. Vous pouvez utiliser une stratégie de dénomination dynamique avec le modèle*.example.compour identifier les segments de chaque sous-domaine portant un nom différent, ce qui entraîne trois nœuds de service sur la carte de service. Si votre application reçoit des demandes dont le nom d'hôte ne correspond pas au modèle, vous verrez un quatrième nœud sur la carte de service avec un nom de secours que vous spécifiez.

Pour utiliser le même nom pour tous les segments de la demande, spécifiez le nom de votre application lorsque vous initialisez le filtre servlet, comme indiqué dans la section précédente. Cela a le même effet que celui obtenu avec la création d'uneStratégie de dénomination des segmentsen appelantSegmentNamingStrategy.fixed()et la transmet à laAWSXRayServletFilterconstructeur.

Note

Vous pouvez remplacer le nom de service par défaut que vous définissez avec la AWS_XRAY_TRACING_NAMEvariable d'environnementVariables d’environnement.

Une stratégie d'attribution de noms dynamique définit un modèle auquel doivent correspondre les noms d'hôte et un nom par défaut à utiliser si le nom d'hôte de la demande HTTP ne correspond pas au modèle. Pour nommer les segments de façon dynamique dans Tomcat, utilisez dynamicNamingRecognizedHosts et dynamicNamingFallbackName pour définir, respectivement, le modèle et le nom par défaut.

Exemple WEB-INF/web.xml - Filtre servlet avec attribution de noms dynamique
<filter> <filter-name>AWSXRayServletFilter</filter-name> <filter-class>com.amazonaws.xray.javax.servlet.AWSXRayServletFilter</filter-class> <init-param> <param-name>dynamicNamingRecognizedHosts</param-name> <param-value>*.example.com</param-value> </init-param> <init-param> <param-name>dynamicNamingFallbackName</param-name> <param-value>MyApp</param-value> </init-param> </filter> <filter-mapping> <filter-name>AWSXRayServletFilter</filter-name> <url-pattern>*</url-pattern> </filter-mapping>

Pour Spring, créez une dynamiqueStratégie de dénomination des segmentsen appelantSegmentNamingStrategy.dynamic(), et transmettez-le à laAWSXRayServletFilterconstructeur.

Exemple src/main/java/myapp/WebConfig.java - Filtre servlet avec attribution de noms dynamique
package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import javax.servlet.Filter; import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter; import com.amazonaws.xray.strategy.SegmentNamingStrategy; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter(SegmentNamingStrategy.dynamic("MyApp", "*.example.com")); } }