AWS X-Ray documents segmentés - 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.

AWS X-Ray documents segmentés

Un segment de suivi est une représentation JSON d'une demande que sert votre application. Un segment de trace enregistre des informations sur la demande d'origine, des informations sur le travail effectué localement par votre application et des sous-segments contenant des informations sur les appels en aval que votre application effectue vers AWS des ressources, des API HTTP et des bases de données SQL.

Un document de segment transmet des informations sur un segment à X-Ray. Un document de segment peut peser jusqu'à 64 kB et contenir un segment entier avec des sous-segments, un fragment de segment indiquant qu'une demande est en cours ou un sous-segment unique envoyé séparément. Vous pouvez envoyer des documents de segment directement à X-Ray à l'aide de l'PutTraceSegmentsAPI.

X-Ray compile et traite les documents segmentés pour générer des résumés de traces interrogeables et des traces complètes auxquels vous pouvez accéder à l'aide des API GetTraceSummarieset BatchGetTraces, respectivement. Outre les segments et sous-segments que vous envoyez à X-Ray, le service utilise les informations contenues dans les sous-segments pour générer des segments déduits et les ajouter à la trace complète. Les segments déduits représentent les services et les ressources en aval sur la carte de suivi.

X-Ray fournit un schéma JSON pour les documents segmentés. Vous pouvez télécharger le schéma ici : xray-segmentdocument-schema-v1.0.0. Les champs et les objets figurant dans le schéma sont décrits plus en détail dans les sections suivantes.

Un sous-ensemble de champs de segment est indexé par X-Ray pour être utilisé avec des expressions de filtre. Par exemple, si vous attribuez un identifiant unique au user champ d'un segment, vous pouvez rechercher des segments associés à des utilisateurs spécifiques dans la console X-Ray ou à l'aide de l'GetTraceSummariesAPI. Pour de plus amples informations, veuillez consulter Utilisation d'expressions de filtre.

Lorsque vous instrumentez votre application avec le SDK X-Ray, celui-ci génère des documents segmentés pour vous. Au lieu d'envoyer les documents segmentés directement à X-Ray, le SDK les transmet via un port UDP local au daemon X-Ray. Pour de plus amples informations, veuillez consulter Envoi de documents segmentés au daemon X-Ray.

Champs de segment

Un segment enregistre les informations de suivi d'une demande que votre application sert. Au minimum, un segment enregistre le nom, l'ID, l'heure de début, l'ID de suivi et l'heure de fin de la demande.

Exemple Segment terminé minimal
{ "name" : "example.com", "id" : "70de5b6f19ff9a0a", "start_time" : 1.478293361271E9, "trace_id" : "1-581cf771-a006649127e371903a2de979", "end_time" : 1.478293361449E9 }

Les champs suivants sont obligatoires, ou soumis à condition, pour les segments.

Note

Les valeurs doivent être des chaînes (jusqu'à 250 caractères), sauf mention contraire.

Champs de segment obligatoires
  • name— Nom logique du service qui a traité la demande, 200 caractères maximum. Par exemple, le nom de votre application ou le nom de domaine. Les noms peuvent contenir des lettres en Unicode, des nombres et des espaces, ainsi que les symboles suivants : _, ., :, /, %, &, #, =, +, \, -, @

  • id— Un identifiant 64 bits pour le segment, unique parmi les segments d'une même trace, en 16 chiffres hexadécimaux.

  • trace_id— Un identifiant unique qui connecte tous les segments et sous-segments issus d'une seule demande client.

    Format d'identification X-Ray Trace

    Un X-Ray trace_id est composé de trois chiffres séparés par des tirets. Par exemple, 1-58406520-a006649127e371903a2de979. Cela consiste notamment à :

    • Le numéro de version, qui est1.

    • L'heure de la demande d'origine sous Unix Epoch Time en utilisant 8 chiffres hexadécimaux.

      Par exemple, le 1er décembre 2016 à 10 h 00 PST est exprimé en 1480615200 secondes ou 58406520 en chiffres hexadécimaux.

    • Identifiant 96 bits unique au monde pour la trace en 24 chiffres hexadécimaux.

    Note

    X-Ray prend désormais en charge les identifiants de trace créés à OpenTelemetry l'aide de tout autre framework conforme à la spécification W3C Trace Context. Un ID de trace W3C doit être formaté au format X-Ray Trace ID lors de son envoi à X-Ray. Par exemple, l'ID de trace du W3C 4efaaf4d1e8720b39541901950019ee5 doit être formaté comme 1-4efaaf4d-1e8720b39541901950019ee5 lorsqu'il est envoyé à X-Ray. Les identifiants de trace X-Ray incluent l'horodatage de la demande d'origine à l'époque Unix, mais cela n'est pas obligatoire lors de l'envoi des identifiants de trace du W3C au format X-Ray.

    Sécurité de l'ID de suivi

    Les ID de suivi sont visibles dans les en-têtes de réponse. Générez des ID de suivi avec un algorithme aléatoire sécurisé pour garantir que les attaquants ne puissent pas calculer vos futurs ID de suivi et envoyer des demandes à votre application avec ces ID.

  • start_timenombre correspondant à l'heure à laquelle le segment a été créé, en secondes à virgule flottante par rapport à l'époque. Par exemple, 1480615200.010 ou 1.480615200010E9. Utilisez autant de décimales que nécessaire. La résolution en microsecondes est recommandée si elle est disponible.

  • end_timenuméro correspondant à l'heure à laquelle le segment a été fermé. Par exemple, 1480615200.090 ou 1.480615200090E9. Spécifiez une end_time ou in_progress.

  • in_progressbooléen, défini sur au true lieu de spécifier un end_time pour enregistrer qu'un segment est démarré mais qu'il n'est pas terminé. Envoyez un segment en cours lorsque votre application reçoit une demande longue à servir, pour suivre la réception de la demande. Lorsque la réponse est envoyée, envoyez le segment terminé pour remplacer le segment en cours. N'envoyez qu'un segment complet, et un ou zéro segment en cours, par demande.

Noms des services

Un segment name doit correspondre au nom de domaine ou au nom logique du service qui génère le segment. Toutefois, cela n'est pas appliqué. Toute application autorisée PutTraceSegmentspeut envoyer des segments sous n'importe quel nom.

Les champs suivants sont facultatifs pour les segments.

Champs de segment facultatifs
  • service— Un objet contenant des informations sur votre application.

    • version— Chaîne identifiant la version de votre application qui a répondu à la demande.

  • user— Chaîne identifiant l'utilisateur qui a envoyé la demande.

  • origin— Type de AWS ressource exécutant votre application.

    Valeurs prises en charge
    • AWS::EC2::Instance— Une instance Amazon EC2.

    • AWS::ECS::Container— Un conteneur Amazon ECS.

    • AWS::ElasticBeanstalk::Environment— Un environnement Elastic Beanstalk.

    Lorsque plusieurs valeurs sont applicables à votre application, utilisez celle qui est la plus spécifique. Par exemple, un environnement Docker Elastic Beanstalk multicontainer exécute votre application sur un conteneur Amazon ECS, qui s'exécute à son tour sur une instance Amazon EC2. Dans ce cas, vous devez définir l'origine sur AWS::ElasticBeanstalk::Environment car l'environnement est le parent des deux autres ressources.

  • parent_id— Un ID de sous-segment que vous spécifiez si la demande provient d'une application instrumentée. Le SDK X-Ray ajoute l'ID du sous-segment parent à l'en-tête de suivi pour les appels HTTP en aval. Dans le cas de sous-segments imbriqués, un sous-segment peut avoir un segment ou un sous-segment comme parent.

  • httphttpobjets contenant des informations sur la requête HTTP d'origine.

  • awsawsobjet contenant des informations sur la AWS ressource sur laquelle votre application a envoyé la demande.

  • error,throttle,fault, et cause — champs d'erreur qui indiquent qu'une erreur s'est produite et qui incluent des informations sur l'exception à l'origine de l'erreur.

  • annotationsannotationsobjet avec des paires clé-valeur que vous souhaitez que X-Ray indexe pour la recherche.

  • metadata: metadataobjet contenant toutes les données supplémentaires que vous souhaitez stocker dans le segment.

  • subsegmentsensemble d'subsegmentobjets.

Sous-segments

Vous pouvez créer des sous-segments pour enregistrer les appels Services AWS et les ressources que vous effectuez avec le AWS SDK, les appels vers des API Web HTTP internes ou externes ou les requêtes de base de données SQL. Vous pouvez également créer des sous-segments pour déboguer ou annoter les blocs de code de votre application. Comme les sous-segments peuvent contenir d'autres sous-segments, un sous-segment personnalisé qui enregistre les métadonnées relatives à un appel de fonction interne peut contenir d'autres sous-segments personnalisés et les sous-segments d'appels en aval.

Un sous-segment enregistre un appel en aval du point de vue du service qui l'appelle. X-Ray utilise des sous-segments pour identifier les services en aval qui n'envoient pas de segments et créer des entrées pour eux sur le graphique des services.

Un sous-segment peut être intégré dans un document de segment entier, ou envoyé séparément. Envoyez des sous-segments séparément aux appels en aval de suivi de manière asynchrone pour les demandes de longue durée, ou pour éviter de dépasser la taille du document de segment maximum.

Exemple Segment avec sous-segment intégré

Un sous-segment indépendant possède type comme subsegment et un parent_id qui identifie le segment parent.

{ "trace_id" : "1-5759e988-bd862e3fe1be46a994272793", "id" : "defdfd9912dc5a56", "start_time" : 1461096053.37518, "end_time" : 1461096053.4042, "name" : "www.example.com", "http" : { "request" : { "url" : "https://www.example.com/health", "method" : "GET", "user_agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7", "client_ip" : "11.0.3.111" }, "response" : { "status" : 200, "content_length" : 86 } }, "subsegments" : [ { "id" : "53995c3f42cd8ad8", "name" : "api.example.com", "start_time" : 1461096053.37769, "end_time" : 1461096053.40379, "namespace" : "remote", "http" : { "request" : { "url" : "https://api.example.com/health", "method" : "POST", "traced" : true }, "response" : { "status" : 200, "content_length" : 861 } } } ] }

Pour les demandes de longue durée, vous pouvez envoyer un segment en cours pour informer X-Ray de la réception de la demande, puis envoyer des sous-segments séparément pour les suivre avant de terminer la demande initiale.

Exemple Segment en cours
{ "name" : "example.com", "id" : "70de5b6f19ff9a0b", "start_time" : 1.478293361271E9, "trace_id" : "1-581cf771-a006649127e371903a2de979", "in_progress": true }
Exemple Sous-segment indépendant

Un sous-segment indépendant possède type comme subsegment, un trace_id et un parent_id qui identifie le segment parent.

{ "name" : "api.example.com", "id" : "53995c3f42cd8ad8", "start_time" : 1.478293361271E9, "end_time" : 1.478293361449E9, "type" : "subsegment", "trace_id" : "1-581cf771-a006649127e371903a2de979" "parent_id" : "defdfd9912dc5a56", "namespace" : "remote", "http" : { "request" : { "url" : "https://api.example.com/health", "method" : "POST", "traced" : true }, "response" : { "status" : 200, "content_length" : 861 } } }

Lorsque la demande est terminée, fermez le segment en le renvoyant avec un end_time. Le segment complet remplace le segment en cours.

Vous pouvez également envoyer des sous-segments séparément pour les demandes complètes qui ont déclenché des workflows asynchrones. Par exemple, une API Web peut renvoyer une réponse OK 200 juste avant de démarrer le travail que l'utilisateur demandé. Vous pouvez envoyer un segment complet à X-Ray dès que la réponse est envoyée, suivi de sous-segments pour le travail terminé ultérieurement. Comme pour les segments, vous pouvez aussi envoyer un fragment de sous-segment pour enregistrer le démarrage du sous-segment, puis le remplacer par un sous-segment complet une fois que l'appel en aval est terminé.

Les champs suivants sont obligatoires, ou soumis à condition, pour les sous-segments.

Note

Les valeurs doivent être des chaînes (jusqu'à 250 caractères), sauf mention contraire.

Champs de sous-segment obligatoires
  • id— Un identifiant de 64 bits pour le sous-segment, unique parmi les segments d'une même trace, en 16 chiffres hexadécimaux.

  • name— Nom logique du sous-segment. Pour les appels en aval, nommez le sous-segment après l'appel de la ressource ou du service. Pour les sous-segments personnalisés, nommez le sous-segment après le code qu'il instrumente (par exemple, un nom de fonction).

  • start_timenombre correspondant à l'heure à laquelle le sous-segment a été créé, en secondes à virgule flottante par rapport à l'époque, avec une précision de quelques millisecondes. Par exemple, 1480615200.010 ou 1.480615200010E9.

  • end_timenuméro correspondant à l'heure à laquelle le sous-segment a été fermé. Par exemple, 1480615200.090 ou 1.480615200090E9. Spécifiez une end_time ou in_progress.

  • in_progressbooléen défini sur true au lieu de spécifier un end_time pour enregistrer qu'un sous-segment est démarré, mais qu'il n'est pas terminé. Envoyez uniquement un sous-segment complet, et un ou zéro sous-segment en cours, par demande en aval.

  • trace_id— ID de trace du segment parent du sous-segment. Obligatoire uniquement en cas d'envoi séparé d'un sous-segment.

    Format d'identification X-Ray Trace

    Un X-Ray trace_id est composé de trois chiffres séparés par des tirets. Par exemple, 1-58406520-a006649127e371903a2de979. Cela consiste notamment à :

    • Le numéro de version, qui est1.

    • L'heure de la demande d'origine sous Unix Epoch Time en utilisant 8 chiffres hexadécimaux.

      Par exemple, le 1er décembre 2016 à 10 h 00 PST est exprimé en 1480615200 secondes ou 58406520 en chiffres hexadécimaux.

    • Identifiant 96 bits unique au monde pour la trace en 24 chiffres hexadécimaux.

    Note

    X-Ray prend désormais en charge les identifiants de trace créés à OpenTelemetry l'aide de tout autre framework conforme à la spécification W3C Trace Context. Un ID de trace W3C doit être formaté au format X-Ray Trace ID lors de son envoi à X-Ray. Par exemple, l'ID de trace du W3C 4efaaf4d1e8720b39541901950019ee5 doit être formaté comme 1-4efaaf4d-1e8720b39541901950019ee5 lorsqu'il est envoyé à X-Ray. Les identifiants de trace X-Ray incluent l'horodatage de la demande d'origine à l'époque Unix, mais cela n'est pas obligatoire lors de l'envoi des identifiants de trace du W3C au format X-Ray.

  • parent_id— ID de segment du segment parent du sous-segment. Obligatoire uniquement en cas d'envoi séparé d'un sous-segment. Dans le cas de sous-segments imbriqués, un sous-segment peut avoir un segment ou un sous-segment comme parent.

  • typesubsegment. Obligatoire uniquement si vous envoyez un sous-segment séparément.

Les champs suivants sont facultatifs pour les sous-segments.

Champs de sous-segment facultatifs
  • namespaceaws pour les appels du SDK AWS ; remote pour les autres appels en aval.

  • httphttpobjet contenant des informations relatives à un appel HTTP sortant.

  • aws: awsobjet contenant des informations sur la AWS ressource en aval appelée par votre application.

  • error,throttle,fault, et cause — champs d'erreur qui indiquent qu'une erreur s'est produite et qui incluent des informations sur l'exception à l'origine de l'erreur.

  • annotationsannotationsobjet avec des paires clé-valeur que vous souhaitez que X-Ray indexe pour la recherche.

  • metadata: metadataobjet contenant toutes les données supplémentaires que vous souhaitez stocker dans le segment.

  • subsegmentsensemble d'subsegmentobjets.

  • precursor_idstableau d'identifiants de sous-segments identifiant les sous-segments ayant le même parent que ceux terminés avant ce sous-segment.

Données de demande HTTP

Utilisez un bloc HTTP pour enregistrer les détails relatifs à une demande HTTP que votre application a servie (dans un segment) ou que votre application a effectuée auprès d'une API HTTP en aval (dans un sous-segment). La plupart des champs de cet objet correspondent aux informations disponibles dans une demande et une réponse HTTP.

http

Tous les champs sont facultatifs.

  • request— Informations relatives à une demande.

    • method— La méthode de demande. Par exemple, GET.

    • url— L'URL complète de la demande, compilée à partir du protocole, du nom d'hôte et du chemin de la demande.

    • user_agent— La chaîne d'agent utilisateur du client du demandeur.

    • client_ip— L'adresse IP du demandeur. Peut être récupérée depuis la Source Address du paquet IP ou, pour les demandes acheminées, à partir d'un en-tête X-Forwarded-For.

    • x_forwarded_for— (segments uniquement) booléen indiquant que le client_ip a été lu à partir d'un X-Forwarded-For en-tête et qu'il n'est pas fiable car il aurait pu être falsifié.

    • traced— (sous-segments uniquement) booléen indiquant que l'appel en aval est destiné à un autre service suivi. Si ce champ est défini surtrue, X-Ray considère que la trace est interrompue jusqu'à ce que le service en aval télécharge un segment dont le parent_id nom correspond à celui id du sous-segment contenant ce bloc.

  • response— Informations relatives à une réponse.

    • statusentier indiquant le statut HTTP de la réponse.

    • content_lengthentier indiquant la longueur du corps de la réponse en octets.

Lorsque vous instrumentez un appel à une API Web en aval, enregistrez un sous-segment contenant des informations sur la requête et la réponse HTTP. X-Ray utilise le sous-segment pour générer un segment inféré pour l'API distante.

Exemple Segmentation pour un appel HTTP servi par une application s'exécutant sur Amazon EC2
{ "id": "6b55dcc497934f1a", "start_time": 1484789387.126, "end_time": 1484789387.535, "trace_id": "1-5880168b-fd5158284b67678a3bb5a78c", "name": "www.example.com", "origin": "AWS::EC2::Instance", "aws": { "ec2": { "availability_zone": "us-west-2c", "instance_id": "i-0b5a4678fc325bg98" }, "xray": { "sdk_version": "2.11.0 for Java" }, }, "http": { "request": { "method": "POST", "client_ip": "78.255.233.48", "url": "http://www.example.com/api/user", "user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0", "x_forwarded_for": true }, "response": { "status": 200 } }
Exemple Sous-segment pour un appel HTTP en aval
{ "id": "004f72be19cddc2a", "start_time": 1484786387.131, "end_time": 1484786387.501, "name": "names.example.com", "namespace": "remote", "http": { "request": { "method": "GET", "url": "https://names.example.com/" }, "response": { "content_length": -1, "status": 200 } } }
Exemple Segment déduit pour un appel HTTP en aval
{ "id": "168416dc2ea97781", "name": "names.example.com", "trace_id": "1-62be1272-1b71c4274f39f122afa64eab", "start_time": 1484786387.131, "end_time": 1484786387.501, "parent_id": "004f72be19cddc2a", "http": { "request": { "method": "GET", "url": "https://names.example.com/" }, "response": { "content_length": -1, "status": 200 } }, "inferred": true }

Annotations

Les segments et sous-segments peuvent inclure un annotations objet contenant un ou plusieurs champs indexés par X-Ray afin de les utiliser avec des expressions de filtre. Les champs peuvent avoir des valeurs de type chaîne, numérique ou booléen (ni objet ni tableau). X-Ray indexe jusqu'à 50 annotations par trace.

Exemple Segment pour appel HTTP avec annotations
{ "id": "6b55dcc497932f1a", "start_time": 1484789187.126, "end_time": 1484789187.535, "trace_id": "1-5880168b-fd515828bs07678a3bb5a78c", "name": "www.example.com", "origin": "AWS::EC2::Instance", "aws": { "ec2": { "availability_zone": "us-west-2c", "instance_id": "i-0b5a4678fc325bg98" }, "xray": { "sdk_version": "2.11.0 for Java" }, }, "annotations": { "customer_category" : 124, "zip_code" : 98101, "country" : "United States", "internal" : false }, "http": { "request": { "method": "POST", "client_ip": "78.255.233.48", "url": "http://www.example.com/api/user", "user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0", "x_forwarded_for": true }, "response": { "status": 200 } }

Les clés doivent être au format alphanumérique pour fonctionner avec les filtres. Les traits de soulignement sont autorisés. Les autres symboles et les espaces ne sont pas autorisés.

Metadonnées

Les segments et sous-segments peuvent inclure un metadata objet contenant un ou plusieurs champs avec des valeurs de n'importe quel type, y compris des objets et des tableaux. X-Ray n'indexe pas les métadonnées et les valeurs peuvent être de n'importe quelle taille, tant que le document segmenté ne dépasse pas la taille maximale (64 kB). Vous pouvez consulter les métadonnées dans le document de segment complet retourné par l'API BatchGetTraces. Les clés de champ (debugdans l'exemple suivant) commençant par AWS. sont réservées aux SDK et aux clients AWS fournis.

Exemple Sous-segment personnalisé avec métadonnées
{ "id": "0e58d2918e9038e8", "start_time": 1484789387.502, "end_time": 1484789387.534, "name": "## UserModel.saveUser", "metadata": { "debug": { "test": "Metadata string from UserModel.saveUser" } }, "subsegments": [ { "id": "0f910026178b71eb", "start_time": 1484789387.502, "end_time": 1484789387.534, "name": "DynamoDB", "namespace": "aws", "http": { "response": { "content_length": 58, "status": 200 } }, "aws": { "table_name": "scorekeep-user", "operation": "UpdateItem", "request_id": "3AIENM5J4ELQ3SPODHKBIRVIC3VV4KQNSO5AEMVJF66Q9ASUAAJG", "resource_names": [ "scorekeep-user" ] } } ] }

AWS données sur les ressources

Pour les segments, l'objet aws contient les informations relatives à la ressource sur laquelle votre application est en cours d'exécution. Plusieurs champs peuvent s'appliquer à une même ressource. Par exemple, une application exécutée dans un environnement Docker multiconteneur sur Elastic Beanstalk peut contenir des informations sur l'instance Amazon EC2, le conteneur Amazon ECS exécuté sur l'instance et l'environnement Elastic Beanstalk lui-même.

aws (Segments)

Tous les champs sont facultatifs.

  • account_id— Si votre application envoie des segments à un autre Compte AWS, enregistrez l'identifiant du compte qui exécute votre application.

  • cloudwatch_logs— Tableau d'objets décrivant un seul groupe de CloudWatch logs.

    • log_group— Le nom du groupe de CloudWatch journaux.

    • arn— L'ARN du groupe de CloudWatch logs.

  • ec2— Informations sur une instance Amazon EC2.

    • instance_id— L'ID d'instance de l'instance EC2.

    • instance_size— Type d'instance EC2.

    • ami_id— L'identifiant Amazon Machine Image.

    • availability_zone— La zone de disponibilité dans laquelle l'instance est exécutée.

  • ecs— Informations sur un conteneur Amazon ECS.

    • container— Le nom d'hôte de votre conteneur.

    • container_id— L'identifiant complet de votre conteneur.

    • container_arn— L'ARN de votre instance de conteneur.

  • eks— Informations sur un cluster Amazon EKS.

    • pod— Le nom d'hôte de votre pod EKS.

    • cluster_name— Le nom du cluster EKS.

    • container_id— L'identifiant complet de votre conteneur.

  • elastic_beanstalk— Informations sur un environnement Elastic Beanstalk. Vous trouverez ces informations dans un fichier nommé /var/elasticbeanstalk/xray/environment.conf sur les dernières plateformes Elastic Beanstalk.

    • environment_name : Nom de l'environnement.

    • version_label— Nom de la version de l'application actuellement déployée sur l'instance qui a répondu à la demande.

    • deployment_idnuméro indiquant l'ID du dernier déploiement réussi sur l'instance qui a répondu à la demande.

  • xray— Des métadonnées sur le type et la version de l'instrumentation utilisée.

    • auto_instrumentation— Booléen indiquant si l'instrumentation automatique a été utilisée (par exemple, l'agent Java).

    • sdk_version— Version du SDK ou de l'agent utilisé.

    • sdk— Le type de SDK.

Exemple AWS bloc avec plugins
"aws":{ "elastic_beanstalk":{ "version_label":"app-5a56-170119_190650-stage-170119_190650", "deployment_id":32, "environment_name":"scorekeep" }, "ec2":{ "availability_zone":"us-west-2c", "instance_id":"i-075ad396f12bc325a", "ami_id": }, "cloudwatch_logs":[ { "log_group":"my-cw-log-group", "arn":"arn:aws:logs:us-west-2:012345678912:log-group:my-cw-log-group" } ], "xray":{ "auto_instrumentation":false, "sdk":"X-Ray for Java", "sdk_version":"2.8.0" } }

Pour les sous-segments, enregistrez les informations relatives aux ressources Services AWS et aux ressources auxquelles votre application accède. X-Ray utilise ces informations pour créer des segments déduits qui représentent les services en aval dans votre carte des services.

aws (Sous-segments)

Tous les champs sont facultatifs.

  • operation— Le nom de l'action d'API invoquée contre une ressource Service AWS or.

  • account_id— Si votre application accède aux ressources d'un autre compte ou envoie des segments vers un autre compte, enregistrez l'ID du compte propriétaire de la AWS ressource à laquelle votre application a accédé.

  • region— Si la ressource se trouve dans une région différente de celle de votre application, enregistrez la région. Par exemple, us-west-2.

  • request_id— Identifiant unique de la demande.

  • queue_url— Pour les opérations sur une file d'attente Amazon SQS, l'URL de la file d'attente.

  • table_name— Pour les opérations sur une table DynamoDB, nom de la table.

Exemple Sous-segment pour un appel à DynamoDB pour enregistrer un élément
{ "id": "24756640c0d0978a", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "DynamoDB", "namespace": "aws", "http": { "response": { "content_length": 60, "status": 200 } }, "aws": { "table_name": "scorekeep-user", "operation": "UpdateItem", "request_id": "UBQNSO5AEM8T4FDA4RQDEB94OVTDRVV4K4HIRGVJF66Q9ASUAAJG", } }

Erreurs et exceptions

Lorsqu'une erreur se produit, vous pouvez enregistrer les détails de l'erreur et les exceptions qui ont été générées. Enregistrez les erreurs dans les segments lorsque votre application renvoie une erreur à l'utilisateur et dans les sous-segments lorsqu'un appel en aval renvoie une erreur.

types d'erreur

Définissez un ou plusieurs des champs suivants sur true pour indiquer qu'une erreur s'est produite. Plusieurs types peuvent s'appliquer en cas d'erreurs composites. Par exemple, une erreur 429 Too Many Requests d'un appel en aval peut contraindre votre application à renvoyer 500 Internal Server Error, auquel cas les trois types s'appliquent.

  • errorbooléen indiquant qu'une erreur client s'est produite (le code d'état de la réponse était 4XX Client Error).

  • throttlebooléen indiquant qu'une demande a été limitée (le code d'état de la réponse était 429 demandes trop nombreuses).

  • faultbooléen indiquant qu'une erreur de serveur s'est produite (le code d'état de réponse était 5XX Server Error).

Indiquez la cause de l'erreur en incluant un objet cause dans le segment ou le sous-segment.

cause

Une cause peut être un ID d'exception sur 16 caractères ou un objet avec les champs suivants :

  • working_directory— Le chemin complet du répertoire de travail lorsque l'exception s'est produite.

  • paths— Le tableau des chemins d'accès aux bibliothèques ou aux modules utilisés lorsque l'exception s'est produite.

  • exceptions— Le tableau des objets d'exception.

Incluez les informations détaillées sur l'erreur dans un ou plusieurs objets exception.

exception

Tous les champs sont facultatifs.

  • id— Un identifiant de 64 bits pour l'exception, unique parmi les segments d'une même trace, en 16 chiffres hexadécimaux.

  • message— Le message d'exception.

  • type— Type d'exception.

  • remotebooléen indiquant que l'exception a été provoquée par une erreur renvoyée par un service en aval.

  • truncatedentier indiquant le nombre de cadres de pile qui sont omis dans lestack.

  • skippedentier indiquant le nombre d'exceptions ignorées entre cette exception et son enfant, c'est-à-dire l'exception qu'elle a provoquée.

  • cause— ID d'exception du parent de l'exception, c'est-à-dire de l'exception à l'origine de cette exception.

  • stacktableau d'objets StackFrame.

Le cas échéant, enregistrez les informations relatives à la pile des appels dans les objets stackFrame.

stackFrame

Tous les champs sont facultatifs.

  • path— Le chemin relatif du fichier.

  • line— La ligne du fichier.

  • label— Le nom de la fonction ou de la méthode.

Requêtes SQL

Vous pouvez créer des sous-segments pour les requêtes que votre application effectue auprès d'une base de données SQL.

sql

Tous les champs sont facultatifs.

  • connection_string— Pour les connexions à SQL Server ou à d'autres bases de données qui n'utilisent pas de chaînes de connexion URL, enregistrez la chaîne de connexion, à l'exception des mots de passe.

  • url— Pour une connexion à une base de données utilisant une chaîne de connexion URL, enregistrez l'URL, à l'exception des mots de passe.

  • sanitized_query— La requête de base de données, avec toutes les valeurs fournies par l'utilisateur supprimées ou remplacées par un espace réservé.

  • database_type— Nom du moteur de base de données.

  • database_version— Numéro de version du moteur de base de données.

  • driver_version— Le nom et le numéro de version du pilote du moteur de base de données utilisé par votre application.

  • user— Nom d'utilisateur de la base de données.

  • preparationcall si la requête a utilisé un PreparedCall ; statement si la requête a utilisé PreparedStatement a.

Exemple Sous-segment avec une requête SQL
{ "id": "3fd8634e78ca9560", "start_time": 1484872218.696, "end_time": 1484872218.697, "name": "ebdb@aawijb5u25wdoy.cpamxznpdoq8.us-west-2.rds.amazonaws.com", "namespace": "remote", "sql" : { "url": "jdbc:postgresql://aawijb5u25wdoy.cpamxznpdoq8.us-west-2.rds.amazonaws.com:5432/ebdb", "preparation": "statement", "database_type": "PostgreSQL", "database_version": "9.5.4", "driver_version": "PostgreSQL 9.4.1211.jre7", "user" : "dbuser", "sanitized_query" : "SELECT * FROM customers WHERE customer_id=?;" } }