Conceitos de rastreio

O rastreio, ou de acordo com a Criação de perfil de transação definido pelo usuário do Gartner, está no núcleo de cada ferramenta Application Performance Management. Instana oferece uma visão abrangente da arquitetura da sua aplicação e dos padrões de chamadas distribuídas, ao analisar os fluxos de transações por todos os componentes conectados. Essa abordagem é especialmente relevante em ambientes altamente distribuídos e de microsserviço

O artigo “Conceitos de rastreamento” descreve o conceito geral de rastreamento distribuído e como ele é implementado no Instana AutoTrace™. Para obter mais informações, consulte a se ção “Rastreamento” em Instana, que explica quais tecnologias e ambientes de execução podem ser rastreados com o Instana.

Rastrear

Um rastreio representa uma única solicitação e o respectivo caminho por meio de um sistema de serviços. Um rastreio pode ser um resultado direto de uma solicitação que é iniciada pelo navegador de um cliente, tarefa planejada ou qualquer outra execução interna. Cada rastreio é composto por uma ou mais chamadas.

O link para o código-fonte é exibido se o processo estiver em execução no momento. Se o processo não estiver mais em execução, o sistema exibe uma mensagem informando que o código-fonte foi compilado. Portanto, você não pode ver mais detalhes.

Chamada

Uma chamada representa a comunicação entre dois serviços: uma solicitação e uma resposta (assíncrona) Cada chamada é um conjunto de medições de data e hora correspondentes a uma determinada Chamada de Procedimento Remoto ( RPC ) ou chamada de serviço. Na interface do usuário do Instana, cada tipo de chamada é destacado, como chamadas de rede ( HTTP ), mensagens, banco de dados, em lote ou internas.

Para capturar os dados de chamada, o responsável pela chamada e o lado do responsável pela chamada são medidos, o que é crucial em sistemas distribuídos No rastreio distribuído, essas medidas individuais são chamadas de spans

Uma chamada interna é um tipo específico de chamada que representa o trabalho que é feito dentro de um serviço Ele pode ser criado a partir de spans intermediários que são enviados através de rastreio personalizado. Se você preferir implementar rastreamento personalizado para criar sua própria instrumentação, o Instana oferece suporte ao OpenTelemetry, OpenTracing, OpenCensus, Jaeger, Zipkin, ao Web Trace SDK ou a um dos SDKs de rastreamento específicos para cada linguagem.

As chamadas podem representar operações incorridas em erros. Por exemplo, uma chamada que represente uma operação HTTP pode resultar em um código de status 5xx, ou a invocação de um método API por meio de Java Remote Method Invocation (RMI) pode resultar em uma exceção. Essas chamadas são consideradas incorretas e são assinaladas como tal na interface do usuário do Instana, conforme mostrado na imagem a seguir.

Observação: as chamadas de ` HTTP ` que resultam no código de status ` 4xx ` não são consideradas erros, uma vez que ` 4xx ` são definidos como erros do lado do cliente.

Visualização Rastreio

Conforme mostrado na imagem, os registros de erros são mostrados na chamada à qual eles estão associados Instana coletar automaticamente registros com os níveis WARN e ERROR (e equivalentes, dependendo da estrutura de registro). Na imagem, uma chamada é incorreta e possui um log de erros associado a ela. No entanto, em geral uma chamada pode ser errônea sem ter logs de erros associados a ele, e vice-versa.

Uma chamada com erro no ` Instana ` é uma chamada de serviço que não é concluída com sucesso. Esse erro ocorre por diversos motivos, como problemas de rede, erros de servidor, expiração de tempo ou exceções no nível do aplicativo. Instana analisa os valores de retorno das chamadas de método, as exceções lançadas e outros indicadores de falha para identificar essas chamadas com erros. Uma chamada com erro não está necessariamente relacionada aos códigos de status d HTTP. Instana monitora as aplicações no nível do método e, se um método retornar um código de falha ou lançar uma exceção, o Instana marca a chamada como errônea.

Instana também pode identificar chamadas com erros que talvez não tenham sido registradas explicitamente, permitindo uma visão mais abrangente do estado da aplicação.

Amplitude

O nome span é derivado do papel Dapper do Googlee é curto para timespan. Os spans representam a sincronização de execuções de código, ou seja, uma ação com um horário de início e encerramento. Span também contém um conjunto de dados que consiste em um registro de data e hora e uma duração. Diferentes tipos de spans podem ter um ou vários conjuntos de dados que são completos com as anotações de metadados Cada modelo de rastreio consiste em um bloco de spans em um conjunto hierárquico ordenado por identificadores de 64 bits e usado para referência entre os spans pai (responsável pela chamada) e filho (responsável pela chamada). Em cada rastreio, o primeiro span serve como a raiz e seu identificador de 64 bits é o identificador para o rastreio inteiro.

O primeiro span de um serviço específico indica que uma chamada entrou no serviço e é chamado de span de entrada (no papel Dapper, o span de entrada é denominado "span do servidor"). Spans de chamadas que saem de um serviço são chamados span de saída (no papel Dapper, o span de saída é denominado "span do cliente"). Além dos spans de entrada e saída, os spans intermediários marcam seções significativas de código, portanto, o tempo de execução de rastreio pode ser claramente atribuído ao código correto.

Modelo de span

Cada span tem um tipo associado, como chamada HTTP ou conexão com o banco de dados. Dependendo do tipo de span, dados mais contextuais estão associados a eles. Para seguir uma sequência de períodos pelos serviços, a Instana envia cabeçalhos de correlação automaticamente com saídas instrumentadas, que são lidos automaticamente pelas entradas da Instana. Para obter mais informações, consulte HTTP Tracing Headers.

Entendendo o rastreio

Pilhas de chamada

Uma pilha de chamada é uma lista ordenada de execuções de código. Sempre que o código chama outro código, o novo código é colocado na parte superior da pilha. As pilhas de chamada são usadas por tempos de execução de todas as linguagens de programação e são geralmente impressas como um rastreio de pilha Quando ocorre um erro, o rastreio de pilha rastreia de volta às chamadas que levaram ao erro.

Por exemplo, a mensagem de erro a seguir afirma que Maçã não é um número. Combinado com a pilha de chamada, é possível reduzir em um sistema complexo onde o erro ocorreu. A mensagem por si só é geralmente insuficiente, uma vez que o algoritmo NumberUtil pode ser usado em muitos lugares.

Thread.run()
  HttpFramework.service()
    HttpFramework.dispatch()
      ShoppingCart.update()
        ShoppingCart.updateCart()
          ShoppingCart.parseQuantity()
            ShoppingCart.convertParams()
              NumberUtil.convert()  <-- Error: "Apple is not a number"
 

Para entender o motivo do erro, use a pilha de chamada para rastrear o erro de volta para o método de negócios relevante, que neste caso, é ShoppingCart.parseQuantity().

As próprias pilhas de chamada são insuficientes para o monitoramento. Eles não são fáceis de ler e não fornecem informações para correlacionar o desempenho e a disponibilidade de um sistema com o funcionamento geral. Para ver o que acontece em uma execução de código e correlacionar, considere informações como atividade de processo, uso de recursos, enfileiramento, padrões de acesso, carregamento e rendimento, funcionamento do sistema e do aplicativo

Rastreio distribuído

Com a introdução de arquiteturas orientadas a serviços (SOA), a pilha de chamada é dividida.. Por exemplo, a lógica ShoppingCart agora pode residir no servidor A, enquanto NumberUtil reside no servidor B. Um rastreio de erro no servidor B contém apenas a pilha de chamada curta do erro de análise.. Enquanto no servidor A, um novo erro é produzido indicando que algo deu errado no servidor B, mas não indicando o problema em si.

Em vez de uma única pilha de chamada de erro que é fácil de resolver, você termina com duas pilhas de chamada com dois erros. Além disso, como não existe conexão entre os dois, torna impossível ter acesso a ambos ao mesmo tempo.

Servidor A:

Thread.run()
  HttpFramework.service()
    HttpFramework.dispatch()
      ShoppingCart.update()
        ShoppingCart.updateCart()
          ShoppingCart.parseQuantity()
            ShoppingCart.convertParams()
              RestClient.invokeConversion() <-- Error: Unkown
 

Servidor B:

Thread.run()
  HttpFramework.service()
    HttpFramework.dispatch()
      NumberUtil.convert()  <-- Error: "Apple is not a number"
 

A ideia por trás do rastreio distribuído é corrigir esse problema conectando as duas pilhas de chamadas de erro entre si. A maioria das implementações usa um mecanismo simples para fazer isso; quando o servidor A chama o servidor B, a ferramenta de monitoramento de desempenho do aplicativo (APM) inclui um identificador na chamada que serve como um ponto de referência comum entre as pilhas de chamadas no sistema APM. Esse mecanismo é chamado correlação e para produzir um erro, ele une as duas pilhas de chamada.

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"
 

Ao entender onde a chamada remota ocorre e em quais partes do servidor da pilha de chamada foram executadas, é possível descobrir que o ShoppingCart foi o contexto do erro e o NumberUtil causou a falha da atividade do carrinho de compras.

Medindo Desempenho

No entanto, os exemplos anteriores ilustram que as ferramentas APM rastreiam erros usando o mesmo mecanismo usado para obter e apresentar medições de desempenho. O rastreio é anotado com números de desempenho conforme mostrado:

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()
 

O tempo total para executar a atualização do carrinho de compras é de aproximadamente 413 ms. A conversão numérica (NumberUtil.convert()) levou 5 ms. O tempo gasto entre essas duas etapas está distribuído por várias chamadas, portanto, você deve procurar por picos significativos. No exemplo, a atualização do carrinho (ShoppingCart.updateCart()) levou um total de 411 ms, enquanto a análise (ShoppingCart.parseQuantity()) exigiu apenas 211 ms, que por si só gastou a maior parte do tempo fazendo a chamada remota.

Rastreio com a Instana

Se ocorrerem erros ou desempenho lento, um contexto detalhado será fornecido para que todos os dados necessários para a resolução de problemas de um caso específico estejam disponíveis Esses dados, incluindo o callstack, não são coletados para cada chamada por ser uma tarefa invasiva que pode causar sobrecaria de processamento.

Com base no exemplo anterior, o comando ` Instana ` exibe a transação da seguinte forma:

Service A |   ShoppingCart.update - 412ms                       |
Service A        | RestClient.invokeConversion - 200ms |
Service B                    | NumberService - 5ms|
 

A saída que é exibida é uma melhor representação visual de aninhamento e comprimento de chamada, pois é reduzida para as partes críticas, mostrando onde o tempo é gasto e onde as chamadas remotas ocorreram. Ele também se conecta ao Dynamic Graph, que sabe que a CPU no servidor do Service B está sobrecarregada, e pode correlacionar isso com a transação para análise de causa raiz. Outras informações relevantes, como URLs de serviço ou consultas de banco de dados também são capturadas.

Continuidade de rastreio

A continuidade de rastreio significa que as chamadas acionadas por uma solicitação externa são coletadas em um rastreio. Instana utiliza métodos específicos de protocolo para adicionar metadados, tais como cabeçalhos do HTTP, metadados do gRPC, cabeçalhos de mensagem do Kafka, cabeçalhos AMQP, cabeçalhos JMS e outros. Incluir metadados assegura a continuidade de rastreio em todos os protocolos e serviços.

Protocolos de comunicação sem suporte para quaisquer metadados não suportam continuidade de rastreio, o que significa que quando você chama outro serviço sobre tal protocolo, a chamada de saída é uma folha na árvore de rastreio. O trabalho que acontece no receptor da chamada não faz parte desse rastreio. Em vez disso, o recebimento da chamada inicia um novo rastreio e todas as chamadas subsequentes acionadas no receptor pertencem a esse novo rastreio.

A continuidade de rastreio não é suportada nos casos a seguir:

  • Kafka até a versão 0.10 (oKafka introduziu cabeçalhos na versão 0.11)
  • Enviar ou receber mensagens do Kafka com o pacote Node.js kafka-node (ou seja, o pacote não suporta cabeçalhos) Ao trabalhar com o ` Kafka ` no ` Node.js `, utilize o pacote ` npmkafkajs ` em vez de `trace` kafka-node , pois kafkajs este suporta a continuidade do rastreamento. Para obter mais informações, consulte as observações adicionais sobre como continuar o rastreamento de mensagens recebidas)
  • Mensagens de streaming NATS e NATS
  • Microsoft Message Queue

W3C Suporte ao contexto de rastreamento

Os seguintes rastreadores do Instana suportam a especificação de contexto de rastreamento W3C para comunicações HTTP ou HTTPS, além de cabeçalhos proprietários como X-INSTANA-T ou X-INSTANA-S:

Os seguintes rastreadores do Instana não oferecem suporte, no momento, à especificação de contexto de rastreamento W3C. Apenas os cabeçalhos proprietários como X-INSTANA-T ou X-INSTANA-S são suportados:

Rastreamento de cabeçalhos

Para garantir a continuidade do rastreamento entre diferentes serviços, os rastreadores do Instana utilizam diferentes cabeçalhos ou propriedades de metadados, dependendo do protocolo.

Cabeçalhos de rastreio HTTP

Instana Os tracers suportam dois conjuntos de cabeçalhos HTTP para a correlação de rastreamentos. O primeiro conjunto inclui (X-INSTANA-*) os cabeçalhos específicos do fornecedor Instana, e o segundo conjunto inclui os cabeçalhos padrão da especificação de contexto de rastreamento W3C. Instana Os rastreadores adicionam ambos os conjuntos de cabeçalhos às solicitações subsequentes. Se ambos os conjuntos de cabeçalhos estiverem presentes em uma solicitação recebida, os X-INSTANA-* cabeçalhos têm prioridade sobre os cabeçalhos do ` W3C `. Se apenas um conjunto de cabeçalhos estiver presente, o rastreio é continuado a partir desse conjunto. Isso garante a interoperabilidade com outras implementações compatíveis com o W3C (como OpenTelemetry ), ao mesmo tempo em que oferece compatibilidade com versões anteriores dos rastreadores do Instana (sem suporte a W3C ) que ainda estão em uso.

Instana - cabeçalhos de correlação de rastreamento específicos:

  • X-INSTANA-T: Este cabeçalho é o ID de rastreio do rastreio que está em andamento. Instana Os rastreadores suportam IDs de rastreamento com comprimento de 16 ou 32 caracteres, pertencentes ao conjunto de caracteres [ 0-9a-f ]. Ao iniciar um novo rastreio, os rastreadores geram um ID de rastreio aleatório com um comprimento de 16 caracteres. Por exemplo, 7fa8b643c98711ef.
  • X-INSTANA-S: Este cabeçalho é o ID de span do período de saída HTTP que representa a solicitação HTTP de saída no lado do cliente. Instana Os tracers suportam IDs de intervalo com 16 caracteres, pertencentes ao conjunto de caracteres [ 0-9a-f ]. Esse ID torna-se o ID de span pai para o span de entrada no lado do servidor de recebimento. Por exemplo, ff1938c2b29a8010.
  • X-INSTANA-L: Esse cabeçalho é o nível de rastreio. O valor 0 significa que nenhum período é criado (também conhecido como supressão de rastreio) e o valor 1 significa que os períodos são criados. Se esse cabeçalho estiver omisso, o valor será assumido como 1. Quando você enviar X-INSTANA-L=0, omita X-INSTANA-T e X-INSTANA-S

Cabeçalhos de contexto de rastreio W3C :

  • traceparent: Este cabeçalho contém o ID de rastreio, o ID de span pai e sinalizadores adicionais. Esse cabeçalho é aproximadamente equivalente a uma combinação de X-INSTANA-T e X-INSTANA-S Para obter mais informações, consulte a especificação de contexto de rastreio doW3C
  • tracestate: esse cabeçalho tem uma lista opcional de pares de valores de chaves que são coletadas durante o rastreio em andamento... Para obter mais informações, consulte a especificação de contexto de rastreio doW3C Instana Os rastreadores contribuem com um par chave-valor com a chave in para esta lista, no seguinte formato: "in=trace-id;span-id".
Observação: Se você tiver firewalls, proxies ou infraestruturas semelhantes em uso que operem com os cabeçalhos HTTP, adicione todos os cinco cabeçalhos à lista de permissões, o que se aplica a todas as versões de HTTP. Em particular, no que diz respeito aos cabeçalhos de rastreamento, HTTP/1.1 e HTTP/2 não apresentam nenhuma diferença.

Cabeçalhos de mensagens genéricos

Para muitos protocolos de mensagens, os mesmos cabeçalhos de mensagem são usados sobre HTTP, com sublinhados (_) em vez de hifens (-). Ou seja, os cabeçalhos são X_INSTANA_T, X_INSTANA_Se X_INSTANA_L.. Para obter mais informações sobre a semântica dos cabeçalhos individuais, consulte HTTP cabeçalhos de rastreio.. Para descobrir quais protocolos de mensagens usam esse formato de cabeçalho, consulte as informações na seção a seguir.

Cabeçalhos de mensagens AMQP

Para mensagens Advanced Message Queuing Protocol (AMQP), os mesmos cabeçalhos da mensagem são usados sobre HTTP, ou seja, X-INSTANA-T, X-INSTANA-Se X-INSTANA-L. Atualmente, os cabeçalhos de contexto de rastreio W3C não suportam mensagens AMQP porque as mensagens AMQP ainda não possuem uma especificação estável para esse protocolo. Para obter mais informações, consulte HTTP cabeçalhos de rastreio.

AWS SNS atributos da mensagem

No Amazon Simple Notification Service ( AWS SNS ), são utilizados os atributos genéricos de mensagens, ou seja, X_INSTANA_T, X_INSTANA_S, e X_INSTANA_L. Atualmente, os cabeçalhos de contexto de rastreamento do W3C não oferecem suporte ao AWS SNS, pois o AWS SNS ainda não possui uma especificação para esse protocolo. Para obter mais informações, consulte Cabeçalhos do Sistema de Mensagens Genérico

AWS SQS

No Amazon Simple Queue Service ( AWS SQS ), são utilizados os cabeçalhos genéricos de mensagens, X_INSTANA_T X_INSTANA_S, e X_INSTANA_L. Atualmente, os cabeçalhos de contexto de rastreamento do W3C não oferecem suporte ao AWS SQS, pois o AWS SQS ainda não possui uma especificação para esse protocolo. Para obter mais informações, consulte Cabeçalhos do Sistema de Mensagens Genérico

Google Cloud Pub/Sub

Para Google Cloud Pub/Sub, os mesmos cabeçalhos da mensagem são usados sobre HTTP, mas todos em minúsculas, ou seja, x-instana-t, x-instana-se x-instana-l. Atualmente, os cabeçalhos de contexto de rastreio do W3C não suportam Google Cloud Pub/Sub porque nenhuma especificação está disponível para esse protocolo ainda. Para obter mais informações, HTTP de cabeçalhos de rastreio

GraphQL

Correlação de rastreio para GraphQL depende do protocolo de transporte subjacente. Para obter mais informações sobre GraphQL sobre HTTP, consulte HTTP Para consultas GraphQL e mutações que são transportadas por um protocolo diferente, como AMQP e Kafka, consulte a seção desse protocolo específico.

gRPC metadados

No endereço gRPC,, são utilizados os mesmos cabeçalhos de mensagem que no endereço HTTP, ou seja, X-INSTANA-T X-INSTANA-S,, e X-INSTANA-L. Atualmente, os cabeçalhos de contexto de rastreio W3C não suportam gRPC porque nenhuma especificação estável está disponível para esse protocolo ainda. Para obter mais informações, HTTP de cabeçalhos de rastreio

IBM MQ

No caso do ` IBM MQ `, os cabeçalhos de mensagens genéricos são utilizados no rastreamento ` Java `, incluindo X_INSTANA_T, X_INSTANA_S, e X_INSTANA_L. Para obter mais informações, consulte Cabeçalhos do Sistema de Mensagens Genérico

O user exit de rastreamento do ` IBM MQ ` e o user exit de rastreamento do ` IBM App Connect Enterprise ` (ACE) suportam os cabeçalhos de contexto de rastreamento ` W3C ` (traceparent e tracestate) além dos cabeçalhos genéricos de mensagens.

Atualmente, não existem especificações de contexto de rastreamento do W3C para protocolos de mensagens. W3C possui especificações apenas para comunicações HTTP e HTTPS. Quando os user exits do ` IBM MQ ` e do ACE propagam cabeçalhos de contexto de rastreamento pelo protocolo de mensagens, os traceparent cabeçalhos tracestate e são propagados no mesmo formato utilizado nas comunicações do ` HTTP `.

Cabeçalhos de rastreamento JMS

No Serviço de Mensagens d Java (JMS), são utilizados os cabeçalhos genéricos de mensagens, X_INSTANA_T X_INSTANA_S, e X_INSTANA_L. W3C Atualmente, os cabeçalhos de contexto de rastreamento não são suportados pelo JMS, pois ainda não existe uma especificação para esse protocolo no JMS. Para obter mais informações, consulte Cabeçalhos do Sistema de Mensagens Genérico

Kafka rastreamento de cabeçalhos

Cabeçalhos de rastreio do Kafka estão atualmente passando por uma migração. Historicamente, o cabeçalho X_INSTANA_C é usado com uma representação binária do ID de rastreio e do ID de span pai.. Infelizmente, alguns drivers e aplicativos incompletos ou fora de conformidade do Kafka não podem manipular cabeçalhos sem sequência corretamente. Por esse motivo, os rastreadores Instana estão migrando para um conjunto de cabeçalhos com conteúdo em forma de string (X_INSTANA_T, X_INSTANA_S). Todos os rastreadores Instana ainda suportam o cabeçalho antigo X_INSTANA_C, mas já suportam o novo formato de X_INSTANA_T cabeçalho ou X_INSTANA_S. Para obter mais informações sobre essa migração, consulte migração

Cabeçalhos de rastreamento do Modern Kafka : X_INSTANA_T e X_INSTANA_S

Os seguintes cabeçalhos de sequência são usados para correlação de rastreio do Kafka :

  • X_INSTANA_T: O ID de rastreio é uma sequência, que tem sempre 32 caracteres de comprimento e preenchimento esquerdo com 0, conforme necessário. Exemplo: "00000000000000007fa8b643c98711ef".
  • X_INSTANA_S: O ID do span pai tem 16 caracteres. Exemplo: ff1938c2b29a8010.
  • X_INSTANA_L_S: o nível de rastreio (opcional, sequência de tipos). O valor 0 significa que nenhum período é criado (também conhecido como supressão de rastreio) e o valor 1 significa que os períodos são criados. Se o cabeçalho X_INSTANA_L_S estiver ausente, o valor 1 será assumido. Omita X_INSTANA_T e X_INSTANA_S quando você enviar X_INSTANA_L_S=0
Cabeçalho de rastreamento do Legacy Kafka : X_INSTANA_C

Os cabeçalhos binários a seguir são usados para correlação de rastreio do Kafka antes da migração do formato do cabeçalho:

  • X_INSTANA_C
  • X_INSTANA_L

O cabeçalho X_INSTANA_C (contexto de rastreio) combina o rastreio e o ID do span. Seu valor é um cabeçalho binário de 24 bytes. Os primeiros 16 bytes são o ID de rastreio, e os últimos 8 bytes são o ID de span. Quando você usa IDs de rastreio de 64 bits, os primeiros 8 bytes são 0. Quando um processo recebe uma mensagem Kafka com cabeçalho X_INSTANA_C e precisa transformar esse cabeçalho em uma representação em sequência do ID de rastreio e do ID de span pai, as regras a seguir devem ser aplicadas:

  • Se os primeiros 8 bytes do cabeçalho X_INSTANA_C forem todos 0, os bytes de 9-16 de X_INSTANA_C serão convertidos em uma sequência de 16 caracteres do alfabeto [0-9a-f].
  • Se os bytes de 1 a 8 do cabeçalho X_INSTANA_C contiverem pelo menos um byte diferente de zero, os bytes de 1 a 16 serão convertidos em uma sequência de 32 caracteres do mesmo alfabeto. Em ambos os casos, os bytes 17-24 são convertidos em uma sequência de 16 caracteres do alfabeto [0-9a-f].

Os exemplos a seguir são de conversões entre o ID de rastreio, as sequências de ID de span e o cabeçalho X_INSTANA_C binário. Tudo o que é necessário para essa conversão é converter os caracteres da sequência diretamente em octetos e vice-versa:

Com ID de rastreio de 64 bits:

ID de rastreio ID de span 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

Com ID de rastreio de 128 bits:

Observação: O Instana não utiliza IDs de rastreamento de 128 bits, e a migração mencionada de cabeçalhos X_INSTANA_C binários para cabeçalhos de string ocorre antes da migração para IDs de rastreamento de 128 bits. Então, esta tabela tem apenas valor teórico. " Não é aplicável na prática.
ID de rastreio ID de span 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

O cabeçalho X_INSTANA_L (tipo inteiro) denota o nível de rastreio. O valor 0 significa que nenhum período é criado (também conhecido como supressão de rastreio) e o valor 1 significa que os períodos são criados. Não enviar cabeçalho X_INSTANA_C ao enviar X_INSTANA_L=0.