Logo AWS X-Ray

AWS X-Ray

Visualisez, analysez et déboguez vos applications distribuées avec une précision chirurgicale pour identifier les goulots d'étranglement et optimiser les performances.

Pour les non-initiés

Qu'est-ce qu'AWS X-Ray ?

Imaginez que vous êtes le responsable d'un grand restaurant avec de nombreux cuisiniers, serveurs et processus complexes. Les clients se plaignent d'attentes occasionnelles, mais vous ne savez pas exactement où se situe le problème.

AWS X-Ray est comme un système de caméras et de chronomètres qui suivrait chaque étape de la préparation d'un plat - depuis la prise de commande jusqu'à la livraison à table. Cela vous permettrait de voir exactement combien de temps prend chaque tâche, où se trouvent les retards, et quelles étapes fonctionnent bien ou mal.

Pourquoi est-ce important ?

Visibilité complète

Permet de voir l'ensemble du parcours d'une requête à travers tous les services de votre application, même si elle traverse de nombreux composants différents.

Performances optimisées

Aide à identifier précisément où se trouvent les ralentissements dans vos applications, ce qui vous permet d'améliorer rapidement l'expérience utilisateur.

En résumé, AWS X-Ray est un outil essentiel qui donne aux développeurs et aux équipes opérationnelles une vision claire de ce qui se passe à l'intérieur de leurs applications complexes, permettant de résoudre les problèmes plus rapidement et d'améliorer continuellement les performances.

Pour les développeurs

Fonctionnement technique

AWS X-Ray est un service de traçabilité distribué qui collecte des données sur les requêtes traitées par votre application, permettant une analyse détaillée du comportement et des performances de chaque composant de votre architecture.

Les concepts clés

Traces et segments

Une trace X-Ray représente le parcours complet d'une requête à travers votre application. Chaque trace est composée de segments qui représentent le temps passé par la requête dans différents composants de votre application.

Les segments peuvent contenir des sous-segments pour une granularité encore plus fine, permettant de tracer des opérations spécifiques comme les appels à une base de données, les calculs intensifs ou les appels à des services externes.

Service Map

X-Ray génère automatiquement une carte visuelle des services de votre application et de leurs connexions. Cette carte affiche les temps de latence moyens, les taux d'erreur et les relations entre les services, ce qui est particulièrement utile pour les architectures de microservices utilisant Icône AWS LambdaAWS Lambda et Icône API GatewayAPI Gateway.

Échantillonnage intelligent

Pour réduire les coûts et la quantité de données, X-Ray utilise un échantillonnage intelligent des requêtes. Par défaut, la règle d'échantillonnage capture le premier requête chaque seconde et 5% des requêtes supplémentaires, mais ces règles sont personnalisables en fonction de vos besoins.

Vous pouvez définir des règles d'échantillonnage basées sur des critères comme le chemin de la requête, le type de requête, ou même des attributs personnalisés, ce qui vous permet de tracer intensivement les parties critiques de votre application tout en limitant la collecte de données pour les opérations moins importantes.

Instrumentation avec le SDK X-Ray

Pour intégrer X-Ray dans vos applications, AWS fournit des SDK pour divers langages de programmation, notamment Node.js, Java, .NET, Python, Go, et Ruby. Ces SDK permettent d'instrumenter votre code pour capturer des métadonnées supplémentaires et créer des segments personnalisés.

Exemple d'instrumentation avec le SDK X-Ray pour Node.js
// Configuration AWS X-Ray en Node.js const AWSXRay = require('aws-xray-sdk'); const AWS = AWSXRay.captureAWS(require('aws-sdk')); const express = require('express'); const app = express(); // Middleware pour capturer les requêtes HTTP app.use(AWSXRay.express.openSegment('MyApplication')); // Route qui utilise DynamoDB (opération également tracée par X-Ray) app.get('/users/:id', async (req, res) => { try { // Personnalisation des annotations et métadonnées const segment = AWSXRay.getSegment(); segment.addAnnotation('userId', req.params.id); segment.addMetadata('userType', 'premium', 'custom'); // Sous-segment personnalisé pour mesurer une partie spécifique du code const subSegment = segment.addNewSubsegment('getUserDetails'); // Opération DynamoDB (automatiquement tracée) const dynamodb = new AWS.DynamoDB.DocumentClient(); const result = await dynamodb.get({ TableName: 'Users', Key: { id: req.params.id } }).promise(); subSegment.close(); res.json(result.Item); } catch (error) { // Enregistrement d'erreurs dans X-Ray AWSXRay.getSegment().addError(error); res.status(500).json({ error: error.message }); } }); app.use(AWSXRay.express.closeSegment()); app.listen(3000, () => { console.log('Server listening on port 3000'); });

Annotations et métadonnées

X-Ray vous permet d'enrichir vos traces avec des informations contextuelles:

  • Annotations: Paires clé-valeur indexées pour la recherche et le filtrage (limité à 50 par segment)
  • Métadonnées: Objets JSON non indexés pour stocker des informations supplémentaires comme les détails de la requête, le contexte utilisateur, etc.

Intégration dans l'infrastructure AWS

X-Ray s'intègre nativement avec de nombreux services AWS. Par exemple, vous pouvez activer X-Ray pour vos fonctions Icône LambdaLambda, vos API Icône API GatewayAPI Gateway, et votre cluster Icône ECSECS avec un simple réglage de configuration.

Configuration X-Ray avec CloudFormation
# Configuration X-Ray avec AWS CloudFormation Resources: # Rôle IAM pour X-Ray XRayServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # Fonction Lambda avec X-Ray activé XRayEnabledFunction: Type: AWS::Lambda::Function Properties: Handler: index.handler Role: !GetAtt XRayServiceRole.Arn Runtime: nodejs16.x Code: ZipFile: | const AWSXRay = require('aws-xray-sdk-core'); const AWS = AWSXRay.captureAWS(require('aws-sdk')); exports.handler = async (event) => { // Code qui sera automatiquement tracé par X-Ray const dynamo = new AWS.DynamoDB.DocumentClient(); const result = await dynamo.scan({ TableName: 'MyTable' }).promise(); return { statusCode: 200, body: JSON.stringify(result.Items) }; } Tracing: Active # Active le traçage X-Ray # API Gateway avec X-Ray activé ApiGatewayWithXRay: Type: AWS::ApiGateway::RestApi Properties: Name: XRayEnabledAPI # Méthode API Gateway ApiMethod: Type: AWS::ApiGateway::Method Properties: HttpMethod: GET ResourceId: !GetAtt ApiGatewayWithXRay.RootResourceId RestApiId: !Ref ApiGatewayWithXRay AuthorizationType: NONE Integration: IntegrationHttpMethod: POST Type: AWS_PROXY Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${XRayEnabledFunction.Arn}/invocations # Étape de déploiement avec X-Ray activé ApiStage: Type: AWS::ApiGateway::Stage Properties: DeploymentId: !Ref ApiDeployment RestApiId: !Ref ApiGatewayWithXRay StageName: prod TracingEnabled: true # Active le traçage X-Ray ApiDeployment: Type: AWS::ApiGateway::Deployment DependsOn: ApiMethod Properties: RestApiId: !Ref ApiGatewayWithXRay

Cas d'utilisation avancés

  • Analyse des causes racines: Utilisez X-Ray pour identifier la source exacte des défaillances dans des systèmes complexes
  • Optimisation des performances: Identifiez les goulots d'étranglement dans les transactions et les opérations les plus lentes
  • Détection d'anomalies: Configurez des alarmes Icône CloudWatchCloudWatch basées sur les métriques X-Ray pour être alerté des problèmes émergents
  • Traçage entre comptes: Suivez les requêtes qui traversent plusieurs comptes AWS pour une visibilité complète dans les organisations complexes
  • Visualisation des dépendances: Comprenez comment les services interagissent et identifiez les interdépendances non documentées
Applications concrètes

Cas d'usage

Applications serverless complexes

Suivez les requêtes à travers de multiples fonctions Lambda, files d'attente SQS, API Gateway et autres services pour comprendre le comportement de bout en bout de vos architectures serverless.

Optimisation des performances

Identifiez avec précision les requêtes lentes, les opérations coûteuses en ressources et les interactions inefficaces entre services pour cibler vos efforts d'optimisation.

Débogage d'erreurs en production

Obtenez un contexte détaillé des erreurs qui se produisent dans votre environnement de production, réduisant considérablement le temps de résolution des problèmes.

Microservices et systèmes distribués

Visualisez les relations et dépendances entre vos microservices pour faciliter la compréhension, la maintenance et l'évolution de votre architecture.

Industries qui bénéficient de X-Ray

Plusieurs secteurs tirent particulièrement profit de la visibilité apportée par AWS X-Ray :

Finance
E-commerce
SaaS
IoT
Santé
Médias
Jeux vidéo
Télécommunications