Concepts de traçage
Le traçage, ou selon Gartner, le profilage des transactions défini par l'utilisateur, est au cœur de chaque outil de gestion des performances des applications. Instana offre une vue d'ensemble de l'architecture de votre application et des schémas d'appels distribués, en analysant les flux de transactions à travers tous les composants connectés. Cette approche est particulièrement pertinente dans les environnements très distribués et les environnements de microservice.
La section « Concepts de traçage » décrit le principe général du traçage distribué et son implémentation dans Instana AutoTrace™. Pour plus d'informations, consultez la page « Tracing » sur Instana afin de savoir quelles technologies et quels environnements d'exécution peuvent être tracés avec Instana.
Trace
Une trace représente une demande unique et son chemin dans un système de services. Une trace peut être le résultat direct d'une demande lancée par le navigateur d'un client, un travail planifié ou toute autre exécution interne. Chaque trace est composée d'un ou de plusieurs appels.
Le lien vers le code source s'affiche si le processus est en cours d'exécution. Si le processus n'est plus en cours d'exécution, le système affiche un message indiquant que le code source a été compilé. Par conséquent, vous ne pouvez pas consulter plus de détails.
Appel
Un appel représente la communication entre deux services: une demande et une réponse (asynchrone). Chaque appel correspond à un ensemble de données et de mesures temporelles associées à un appel de procédure à distance ( RPC ) ou à un appel de service spécifique. Dans l'interface utilisateur d' Instana, chaque type d'appel est mis en évidence, qu'il s'agisse d'appels vers l' HTTP, de messagerie, de base de données, de traitement par lots ou d'appels internes.
Pour capturer les données d'appel, le côté appelant et le côté appelé sont mesurés, ce qui est crucial dans les systèmes distribués. Dans le traçage distribué, ces mesures individuelles sont appelées étendues.
Un appel interne est un type particulier d'appel qui représente le travail effectué à l'intérieur d'un service. Il peut être créé à partir de travées intermédiaires qui sont envoyées via une fonction de trace personnalisée. Si vous préférez mettre en place un traçage personnalisé pour créer votre propre instrumentation, Instana prend en charge OpenTelemetry, OpenTracing, OpenCensus, Jaeger, Zipkin le SDK Web Trace ou l'un des SDK de traçage spécifiques à un langage.
Les appels peuvent représenter des opérations ayant généré des erreurs. Par exemple, un appel correspondant à une opération de type « HTTP » peut renvoyer un code d'état « 5xx », ou l'appel d'une méthode « API » via l'API RMI (Remote Method Invocation) de Java peut provoquer une exception. Ces appels sont considérés comme erronés et sont signalés comme tels dans l'interface utilisateur d' Instana, comme le montre l'image suivante.

Comme illustré dans l'image, les journaux d'erreurs sont affichés dans l'appel auquel ils sont associés. Instana collecter automatiquement les journaux avec les niveaux WARN et ERROR (et leurs équivalents, selon le framework de journalisation). Dans l'image, un appel est erroné et possède un journal des erreurs qui lui est associé. Cependant, en général, un appel peut être erroné sans que des journaux d'erreurs soient associés à celui-ci, et vice-versa.
Un appel erroné dans « Instana » désigne un appel de service qui ne s'est pas déroulé correctement. Cette erreur peut être due à diverses causes, telles que des problèmes de réseau, des erreurs de serveur, des délais d'attente ou des exceptions au niveau de l'application. Instana analyse les valeurs de retour des appels de méthode, les exceptions levées et d'autres indicateurs d'échec afin d'identifier ces appels erronés. Une erreur de connexion n'est pas nécessairement liée aux codes d'état de l' HTTP. Instana Instana surveille les applications au niveau des méthodes; si une méthode renvoie un code d'échec ou lève une exception, signale l'appel comme erroné.
Instana peut également identifier les appels erronés qui ne sont peut-être pas explicitement consignés, ce qui permet d'avoir une vue d'ensemble plus complète de l'état de santé de l'application.
Séquence
Le nom span est dérivé du document Dapper de Googleet est court pour timespan. Les plages représentent la temporisation des exécutions de code, c'est-à-dire une action avec une heure de début et de fin. Span contient également un ensemble de données composé à la fois d'un horodatage et d'une durée. Différents types d'étendues peuvent avoir un ou plusieurs ensembles de données qui sont complets avec des annotations de métadonnées. Chaque modèle de trace se compose d'un bloc d'étendues dans un ensemble hiérarchique qui est ordonné par des identificateurs 64 bits et qui sont utilisés pour la référence entre les étendues parent (appelant) et enfant (appelé). Dans chaque trace, le premier span sert de racine, et son identificateur 64 bits est l'identificateur de l'ensemble de la trace.
La première plage d'un service particulier indique qu'un appel est entré dans le service et est appelé plage d'entrée (dans le papier Dapper, la plage d'entrée est nommée "plage de serveur"). Les plages d'appels qui quittent un service sont appelées plage d'exit (dans le papier Dapper, la plage d'exit est appelée "plage client"). En plus des plages d'entrée et de sortie, les plages intermédiaires marquent des sections de code significatives, de sorte que l'exécution de la trace peut être clairement attribuée au code correct.

Chaque plage est associée à un type, tel qu'un appel HTTP ou une connexion de base de données. En fonction du type d'étendue, des données contextuelles supplémentaires sont associées. Pour suivre une séquence de spans dans les services, Instana envoie automatiquement des en-têtes de corrélation avec des exits instrumentés, et ces en-têtes de corrélation sont automatiquement lus par les entrées d'Instana. Pour plus d'informations, consultez la page HTTP Tracing Headers.
Présentation du traçage
Piles d'appels
Une pile d'appels est une liste ordonnée d'exécutions de code. Chaque fois que le code appelle un autre code, le nouveau code est placé dans la partie supérieure de la pile. Les piles d'appels sont utilisées par les environnements d'exécution de tous les langages de programmation et sont généralement imprimées sous forme de trace de pile. Lorsqu'une erreur se produit, la trace de pile remonte aux appels qui ont conduit à l'erreur.
Par exemple, le message d'erreur suivant indique qu'Apple n'est pas un nombre. Combiné avec la pile d'appels, il est possible de réduire les données dans un système complexe où l'erreur s'est produite. Le message seul est généralement insuffisant, car l'algorithme NumberUtil peut être utilisé dans de nombreux emplacements.
Thread.run()
HttpFramework.service()
HttpFramework.dispatch()
ShoppingCart.update()
ShoppingCart.updateCart()
ShoppingCart.parseQuantity()
ShoppingCart.convertParams()
NumberUtil.convert() <-- Error: "Apple is not a number"
Pour comprendre pourquoi l'erreur s'est produite, utilisez la pile de rappels pour remonter de l'erreur à la méthode métier appropriée, qui est dans ce cas ShoppingCart.parseQuantity().
Les piles d'appels elles-mêmes sont insuffisantes pour la surveillance. Ils ne sont pas faciles à lire et ne fournissent pas d'informations permettant de corréler les performances et la disponibilité d'un système à la santé globale. Pour voir ce qui se passe sur une exécution de code et pour établir une corrélation, prenez en compte des informations telles que l'activité des processus, l'utilisation des ressources, la mise en file d'attente, les modèles d'accès, la charge et le débit, le système et la santé des applications.
Traçage distribué
Avec l'introduction des architectures orientées service (SOA), la pile d'appels est séparée. Par exemple, la logique ShoppingCart peut désormais résider sur le serveur A, tandis que NumberUtil se trouve sur le serveur B. Une trace d'erreur sur le serveur B contient uniquement la pile d'appels courte de l'erreur d'analyse. Sur le serveur A, une nouvelle erreur est générée indiquant qu'une erreur s'est produite sur le serveur B, mais pas le problème lui-même.
Au lieu d'une seule pile d'appels d'erreur facile à identifier et à résoudre, vous vous retrouvez avec deux piles d'appels avec deux erreurs. De plus, comme aucune connexion n'existe entre les deux, il est impossible d'avoir accès aux deux en même temps.
Serveur A :
Thread.run()
HttpFramework.service()
HttpFramework.dispatch()
ShoppingCart.update()
ShoppingCart.updateCart()
ShoppingCart.parseQuantity()
ShoppingCart.convertParams()
RestClient.invokeConversion() <-- Error: Unkown
Serveur B :
Thread.run()
HttpFramework.service()
HttpFramework.dispatch()
NumberUtil.convert() <-- Error: "Apple is not a number"
L'idée derrière le traçage distribué est de résoudre ce problème en connectant les deux piles d'appels d'erreur l'une à l'autre. La plupart des implémentations utilisent un mécanisme simple pour le faire ; lorsque le serveur A appelle le serveur B, l'outil de surveillance des performances de l'application (APM) ajoute un identificateur à l'appel qui sert de point de référence commun entre les piles d'appels du système APM. Ce mécanisme est appelé corrélation ; pour générer une erreur, il joint les deux piles d'appels.
Thread.run()
HttpFramework.service()
HttpFramework.dispatch()
ShoppingCart.update()
ShoppingCart.updateCart()
ShoppingCart.parseQuantity()
ShoppingCart.convertParams()
RestClient.invokeConversion()
Thread.run()
HttpFramework.service()
HttpFramework.dispatch()
NumberUtil.convert() <-- Error: "Apple is not a number"
En comprenant où l'appel distant a lieu et sur quelles parties serveur de la pile d'appels ont été exécutées, vous pouvez découvrir que le ShoppingCart était le contexte de l'erreur et que NumberUtil a provoqué l'échec de l'activité du panier.
Mesure des performances
Toutefois, les exemples précédents illustrent que les outils APM tracent les erreurs en utilisant le même mécanisme que celui utilisé pour la prise et la présentation des mesures de performances. La trace est annotée avec des numéros de performance comme suit:
413 Thread.run()
413 HttpFramework.service()
413 HttpFramework.dispatch()
412 ShoppingCart.update()
411 ShoppingCart.updateCart()
211 ShoppingCart.parseQuantity()
210 ShoppingCart.convertParams()
200 RestClient.invokeConversion()
10 Thread.run()
10 HttpFramework.service()
10 HttpFramework.dispatch()
5 NumberUtil.convert()
Le temps total nécessaire à la mise à jour du panier s'élève à environ 413 ms. La conversion numérique (NumberUtil.convert()) a pris 5 ms. Le temps écoulé entre ces deux opérations est réparti entre de nombreux appels; vous recherchez donc des pics significatifs. Dans l'exemple, la mise à jour du panier (ShoppingCart.updateCart()) a pris un total de 411 ms, tandis que l'analyse syntaxique (ShoppingCart.parseQuantity()) n'a nécessité que 211 ms, ce qui a nécessité la majeure partie du temps nécessaire à l'exécution de l'appel distant.
Traçage avec Instana
Si des erreurs ou des performances lentes se produisent, un contexte détaillé est fourni pour que toutes les données requises pour l'identification et la résolution d'un cas particulier soient disponibles. Ces données, y compris la pile d'appels, ne sont pas collectées pour chaque appel car il s'agit d'une tâche effractive qui peut entraîner des frais généraux de traitement.
En référence à l'exemple précédent, la commande « Instana » affiche la transaction comme suit :
Service A | ShoppingCart.update - 412ms |
Service A | RestClient.invokeConversion - 200ms |
Service B | NumberService - 5ms|
La sortie affichée est une meilleure représentation visuelle de l'imbrication et de la longueur des appels, car elle est réduite aux parties critiques, indiquant où le temps est passé et où les appels distants ont eu lieu. Il se connecte également au graphique dynamique, qui sait que l'unité centrale du serveur Service B est surchargée et qu'il peut corréler cela à la transaction pour l'analyse des causes profondes. D'autres informations pertinentes, telles que des URL de service ou des requêtes de base de données, sont également capturées.
Continuité du traçage
La continuité du traçage signifie que les appels déclenchés par une demande externe sont collectés dans une seule trace. Instana utilise des méthodes spécifiques à chaque protocole pour ajouter des métadonnées, telles que les en-têtes HTTP, les métadonnées gRPC, les en-têtes de message Kafka, les en-têtes AMQP, les en-têtes JMS, etc. L'ajout de métadonnées garantit la continuité de trace dans tous les protocoles et services.
Les protocoles de communication sans prise en charge des métadonnées ne prennent pas en charge la continuité de trace, ce qui signifie que lorsque vous appelez un autre service via un tel protocole, l'appel sortant est une feuille dans l'arborescence de trace. Le travail qui se produit dans le récepteur de l'appel ne fait pas partie de cette trace. A la place, la réception de l'appel démarre une nouvelle trace et tous les appels ultérieurs qui sont déclenchés dans le destinataire appartiennent à cette nouvelle trace.
La continuité du traçage n'est pas prise en charge dans les cas suivants :
- Kafka jusqu'à la version 0.10 (en-têtes introduits parKafka dans la version 0.11)
- L'envoi ou la réception de messages Kafka avec le package Node.js
kafka-node(c'est-à-dire que le package ne prend pas en charge les en-têtes. Lorsque vous utilisez la fonction ` Kafka ` dans ` Node.js `, utilisez le package `kafkajsnpm ` à la place de `tracekafka-node` carkafkajsil prend en charge la continuité des traces. Pour plus d'informations, consultez les remarques supplémentaires concernant la poursuite du suivi des messages entrants) - Messagerie en continu NATS et NATS
- Microsoft Message Queue
W3C Prise en charge du contexte de trace
Les traceurs d' Instana s suivants prennent en charge la spécification de contexte de trace W3C pour les communications via HTTP ou HTTPS, en plus des en-têtes propriétaires tels que X-INSTANA-T ou X-INSTANA-S:
Les traceurs d' Instana s suivants ne prennent actuellement pas en charge la spécification de contexte de trace W3C. Seuls les en-têtes propriétaires tels que X-INSTANA-T ou X-INSTANA-S sont pris en charge:
Suivi des en-têtes
Afin d'assurer la continuité des traces entre les différents services, les traceurs d' Instana utilisent différents en-têtes ou propriétés de métadonnées, en fonction du protocole.
En-têtes de traçage HTTP
Instana Les traceurs prennent en charge deux ensembles d'en-têtes d' HTTP s pour la corrélation des traces. Le premier ensemble comprend (X-INSTANA-*) les en-têtes spécifiques au fournisseur d' Instana, tandis que le second ensemble comprend les en-têtes standard issues de la spécification du contexte de traçage de l' W3C. Instana Les traceurs ajoutent les deux ensembles d'en-têtes aux requêtes en aval. Si les deux ensembles d'en-têtes sont présents dans une requête entrante, les X-INSTANA-* en-têtes ont la priorité sur les en-têtes de la directive ` W3C `. Si un seul ensemble d'en-têtes est présent, la trace est poursuivie à partir de cet ensemble. Cela garantit l'interopérabilité avec d'autres instruments conformes à la norme « W3C » (tels que OpenTelemetry ), tout en assurant la rétrocompatibilité avec les traceurs Instana d'une version antérieure (ne prenant pas en charge W3C ) qui sont encore déployés sur le terrain.
Instana - en-têtes de corrélation de traces spécifiques :
X-INSTANA-T: cet en-tête correspond à l'ID de trace de la trace en cours. Instana Les traceurs prennent en charge les identifiants de trace d'une longueur de 16 ou 32 caractères, issus de la plage de caractères [ 0-9a-f ]. Lorsque vous démarrez une nouvelle trace, les traceurs génèrent un ID trace aléatoire d'une longueur de 16 caractères. Par exemple,7fa8b643c98711ef.X-INSTANA-S: cet en-tête correspond à l'ID de la plage d'exit HTTP qui représente la demande HTTP sortante côté client. Instana Les traceurs prennent en charge les identifiants de plage (span IDs) de 16 caractères issus de la plage de caractères [ 0-9a-f ]. Cet ID devient l'ID de plage parent pour la plage d'entrée côté serveur de réception. Par exemple,ff1938c2b29a8010.X-INSTANA-L: cet en-tête correspond au niveau de trace. La valeur 0 signifie qu'aucune étendue n'est créée (également appelée suppression de trace) et la valeur 1 signifie que des étendues sont créées. Si cet en-tête est manquant, la valeur est supposée être 1. Lorsque vous envoyezX-INSTANA-L=0, omettezX-INSTANA-TetX-INSTANA-S.
En-têtes de contexte de trace W3C :
traceparent: cet en-tête contient l'ID de trace, l'ID de plage parent et des indicateurs supplémentaires. Cet en-tête est à peu près équivalent à une combinaison deX-INSTANA-Tet deX-INSTANA-S. Pour plus d'informations, voir W3C trace context specification.tracestate: cet en-tête comporte une liste facultative de paires clé-valeur qui sont collectées lors de la trace en cours. Pour plus d'informations, voir W3C trace context specification. Instana Les traceurs ajoutent à cette liste une paireinclé-valeur dont la clé est, au format suivant :"in=trace-id;span-id".
En-têtes de message génériques
Pour de nombreux protocoles de messagerie, les mêmes en-têtes de message sont utilisés sur HTTP, avec des traits de soulignement (_) au lieu de traits d'union (-). C'est-à-dire que les en-têtes sont X_INSTANA_T, X_INSTANA_Set X_INSTANA_L. Pour plus d'informations sur la sémantique des en-têtes individuels, voir En-têtes de traceHTTP. Pour savoir quels protocoles de messagerie utilisent ce format d'en-tête, consultez les informations de la section suivante.
En-têtes de messages AMQP
Pour les messages AMQP (Advanced Message Queuing Protocol), les mêmes en-têtes de message sont utilisés sur HTTP, c'est-à-dire X-INSTANA-T, X-INSTANA-Set X-INSTANA-L. Actuellement, les en-têtes de contexte de trace W3C ne prennent pas en charge les messages AMQP car les messages AMQP n'ont pas encore de spécification stable pour ce protocole. Pour plus d'informations, voir En-têtes de traceHTTP.
AWS SNS attributs du message
Pour Amazon Simple Notification Service ( AWS SNS ), on utilise les attributs de messagerie génériques, à savoir, X_INSTANA_T X_INSTANA_S, et X_INSTANA_L. À l'heure actuelle, les en-têtes de contexte de trace d' W3C ne prennent pas en charge AWS SNS, car AWS SNS ne dispose pas encore de spécification pour ce protocole. Pour plus d'informations, voir En-têtes de messagerie génériques.
AWS SQS
Pour Amazon Simple Queue Service ( AWS SQS ), les en-têtes de messagerie génériques utilisées sont X_INSTANA_T, X_INSTANA_S, et X_INSTANA_L. À l'heure actuelle, les en-têtes de contexte de trace d' W3C ne prennent pas en charge AWS SQS, car AWS SQS ne dispose pas encore de spécification pour ce protocole. Pour plus d'informations, voir En-têtes de messagerie génériques.
Google Cloud Pub/Sub
Pour Google Cloud Pub/Sub, les mêmes en-têtes de message sont utilisés sur HTTP, mais tous en minuscules, c'est-à-dire x-instana-t, x-instana-set x-instana-l. Actuellement, les en-têtes de contexte de trace W3C ne prennent pas en charge Google Cloud Pub/Sub car aucune spécification n'est encore disponible pour ce protocole. Pour plus d'informations, voir En-têtes de traçageHTTP.
GraphQL
La corrélation de trace pour GraphQL repose sur le protocole de transport sous-jacent. Pour plus d'informations sur GraphQL sur HTTP, voir En-têtes de traceHTTP. Pour les requêtes et les mutations GraphQL qui sont transportées sur un autre protocole, tel que AMQP et Kafka, voir la section relative à ce protocole particulier.
gRPC métadonnées
Pour gRPC,, les mêmes en-têtes de message sont utilisés que pour HTTP, à savoir, X-INSTANA-T X-INSTANA-S, et X-INSTANA-L. Actuellement, les en-têtes de contexte de trace W3C ne prennent pas en charge gRPC car aucune spécification stable n'est encore disponible pour ce protocole. Pour plus d'informations, voir En-têtes de traçageHTTP.
IBM MQ
Pour l' IBM MQ e, les en-têtes de messagerie génériques sont utilisés dans la trace de l' Java, notamment X_INSTANA_T, X_INSTANA_S, et X_INSTANA_L. Pour plus d'informations, voir En-têtes de messagerie génériques.
Les exits de traçage de l' IBM MQ et de l' IBM App Connect Enterprise (ACE) prennent en charge les en-têtes de contexte de traçage W3C (traceparent et tracestate) en plus des en-têtes de messagerie génériques.
À l'heure actuelle, il n'existe aucune spécification de contexte de traçabilité d' W3C s pour les protocoles de messagerie. W3C ne contient des spécifications que pour les communications via HTTP et HTTPS. Lorsque les exits utilisateur d' IBM MQ et d'ACE transmettent les en-têtes de contexte de trace via le protocole de messagerie, les en-têtes traceparenttracestate et sont transmises dans le même format que celui utilisé dans les communications HTTP.
En-têtes de traçage JMS
Pour le service de messagerie JMS ( Java ), on utilise les en-têtes de messagerie génériques, X_INSTANA_T X_INSTANA_S, et X_INSTANA_L. W3C Les en-têtes de contexte de traçage ne sont actuellement pas pris en charge pour JMS, car il n'existe pas encore de spécification pour ce protocole. Pour plus d'informations, voir En-têtes de messagerie génériques.
Kafka suivi des en-têtes
Les en-têtes de trace Kafka font actuellement l'objet d'une migration. Historiquement, l'en-tête X_INSTANA_C est utilisé avec une représentation binaire de l'ID de trace et de l'ID de plage parent. Malheureusement, certains pilotes et applications Kafka incomplets ou non conformes ne peuvent pas traiter correctement les en-têtes de non-chaîne. C'est pourquoi les traceurs Instana évoluent vers un ensemble d'en-têtes contenant des chaînes de caractères (X_INSTANA_T, X_INSTANA_S). Tous les traceurs Instana prennent toujours en charge l'en-tête X_INSTANA_Chérité, mais ils prennent déjà en charge le nouveau format X_INSTANA_T d'en-tête ou X_INSTANA_S. Pour plus d'informations sur cette migration, voir Migration.
En-têtes de traçabilité d' Kafka s modernes X_INSTANA_T et X_INSTANA_S
Les en-têtes de chaîne suivants sont utilisés pour la corrélation de trace Kafka :
X_INSTANA_T: L'ID de trace est une chaîne, qui comporte toujours 32 caractères, et le remplissage à gauche avec 0 si nécessaire. Exemple :"00000000000000007fa8b643c98711ef".X_INSTANA_S: l'ID de plage parent comporte 16 caractères. Exemple :ff1938c2b29a8010.X_INSTANA_L_S: niveau de trace (facultatif, type chaîne). La valeur 0 signifie qu'aucune étendue n'est créée (également appelée suppression de trace) et la valeur 1 signifie que des étendues sont créées. Si l'en-têteX_INSTANA_L_Sest manquant, la valeur 1 est prise par défaut. OmettezX_INSTANA_TetX_INSTANA_Slorsque vous envoyezX_INSTANA_L_S=0.
En-tête de suivi d' Kafka s héritées X_INSTANA_C
Les en-têtes binaires suivants sont utilisés pour la corrélation de trace Kafka avant la migration du format d'en-tête:
X_INSTANA_CX_INSTANA_L
L'en-tête X_INSTANA_C (contexte de trace) combine la trace et l'ID de plage. Sa valeur est un en-tête binaire de 24 octets. Les 16 premiers octets sont l'ID de trace et les 8 derniers octets sont l'ID de la portée. Lorsque vous utilisez des ID de trace 64 bits, les 8 premiers octets sont 0. Lorsqu'un processus reçoit un message Kafka avec l'en-tête X_INSTANA_C et qu'il doit transformer cet en-tête en une représentation de chaîne de l'ID trace et de l'ID span parent, les règles suivantes doivent être appliquées:
- Si les 8 premiers octets de l'en-tête
X_INSTANA_Csont tous 0, les octets de 9 à 16 deX_INSTANA_Csont convertis en une chaîne de 16 caractères de l'alphabet [0-9a-f]. - Si les octets 1 à 8 de l'en-tête
X_INSTANA_Ccontiennent au moins un octet différent de zéro, les octets 1 à 16 sont convertis en une chaîne de 32 caractères de la même alphabet. Dans les deux cas, les octets 17 à 24 sont convertis en une chaîne de 16 caractères de l'alphabet [0-9a-f].
Les exemples suivants sont des conversions entre l'ID de trace, les chaînes d'ID de plage et l'en-tête X_INSTANA_C binaire. Tout ce qui est nécessaire pour cette conversion est de convertir les caractères de la chaîne directement en octets et vice versa:
Avec l'ID de trace 64 bits:
| ID de la trace | ID d'étendue | X_INSTANA_C |
|---|---|---|
"8000000000000000" |
"ffffffffffffffff" |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff |
"0000000000000001" |
"0000000000000002" |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 |
"7fffffffffffffff" |
"0f0f0f0f0f0f0f0f" |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f |
Avec l'ID de trace 128 bits:
X_INSTANA_C binaires vers les en-têtes sous forme de chaînes de caractères a lieu avant la migration vers les identifiants de trace de 128 bits. Cette table n'a donc qu'une valeur théorique. Elle n'est pas applicable dans la pratique.| ID de la trace | ID d'étendue | X_INSTANA_C |
|---|---|---|
"f0f0f0f0f0f0f0f08000000000000000" |
"ffffffffffffffff" |
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff |
"00000000000000010000000000000002" |
"0000000000000003" |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 |
"f0f0f0f0f0f0f0f07fffffffffffffff" |
"0f0f0f0f0f0f0f0f" |
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f |
L'en-tête X_INSTANA_L (type entier) indique le niveau de trace. La valeur 0 signifie qu'aucune étendue n'est créée (également appelée suppression de trace) et la valeur 1 signifie que des étendues sont créées. N'envoyez pas l'en-tête X_INSTANA_C lorsque vous envoyez X_INSTANA_L=0.