トレースの概念

トレース、または Gartner ユーザー定義のトランザクション・プロファイルによると、すべての Application Performance Management ツールの中核を成しています。 Instana は、接続されているすべてのコンポーネントを経由するトランザクション・フローを理解することで、アプリケーション・アーキテクチャーと分散呼び出しパターンの包括的なビューを提供します。 このアプローチは、高度に分散されたマイクロサービス環境に特に関連しています。

「トレーシングの概念」では、分散トレーシングの一般的な概念と、 Instana AutoTrace™ におけるその実装方法について説明しています。詳細については、「 Instana におけるトレーシング 」を参照してください。ここでは、 Instana を使用してどのテクノロジーやランタイムをトレーシングできるかについて解説しています。

トレース

トレース は、1 つのサービス・システムを経由する単一の要求とそのパスを表します。 トレースは、お客様のブラウザー、スケジュールされたジョブ、またはその他の内部実行によって開始された要求の直接の結果である可能性があります。 各トレースは、1 つ以上の呼び出しで構成されます。

プロセスが現在実行中の場合、ソースコードへのリンクが表示されます。 プロセスが実行されていない場合、システムはソースコードがコンパイル済みであることを示すメッセージを表示します。 そのため、詳細を表示することはできません。

コール

呼び出し は、要求と応答 (非同期) の 2 つのサービス間の通信を表します。 各呼び出しは、特定のリモートプロシージャコール( RPC )またはサービス呼び出しに対応する一連の日時データです。 Instana のUIでは、 HTTP、メッセージング、データベース、バッチ、内部など、各種類の呼び出しが強調表示されます。

呼び出しデータを取り込むために、呼び出し側と呼び出し側の両方が測定されます。これは、分散システムでは非常に重要です。 分散トレースでは、これらの個々の測定値は スパンと呼ばれます。

内部呼び出しは、サービス内で行われる作業を表す特定のタイプの呼び出しです。 これは、カスタム・トレースを介して送信される中間スパンから作成できます。 独自の計測機能を実装するためにカスタムトレースを使用したい場合は、 Instana では、 OpenTelemetryOpenTracingOpenCensusJaegerZipkin、Web Trace SDK、または各言語向けのトレースSDK のいずれかがサポートされています。

呼び出しは、エラーで発生した操作を表すことができます。 たとえば、 HTTP 操作を表す呼び出しでは、 5xx ステータスコードが返される場合があります。また、 Java リモートメソッド呼び出し(RMI)を通じて API を呼び出した場合、例外が発生する可能性があります。 このような呼び出しは誤りであるとみなされ、次の画像に示すように、 Instana のUI上でその旨が明示されます。

注: ステータスコード「 4xx 」を返す HTTP の呼び出しは、 4xx がクライアント側のエラーとして定義されているため、エラーとは見なされません。

トレース・ビュー

画像に示されているように、エラー・ログは関連付けられている呼び出しで表示されます。 Instana レベル WARN および ERROR (および、ロギングフレームワークに応じて同等のもの)のログを自動的に収集します。 イメージでは、呼び出しにエラーがあり、1 つのエラー・ログが関連付けられています。 ただし、一般的には、エラー・ログが関連付けられていない呼び出しはエラーになる可能性があります。また、その逆も同様です。

Instana におけるエラー発生とは、正常に完了しなかったサービス呼び出しのことです。 このエラーは、ネットワークの問題、サーバーエラー、タイムアウト、またはアプリケーションレベルの例外など、さまざまな原因で発生します。 Instana メソッド呼び出しの戻り値、スローされた例外、およびその他の失敗の兆候を分析し、これらの誤った呼び出しを特定します。 誤った判定が、必ずしも HTTP のステータスコードと関連しているわけではありません。 Instana メソッドレベルでアプリケーションを監視し、メソッドが失敗コードを返したり例外をスローしたりした場合、 Instana はその呼び出しをエラーとしてフラグ付けします。

Instana また、明示的にログに記録されていない可能性のある誤った呼び出しを特定することもでき、アプリケーションの状態をより包括的に把握できるようになります。

スパン

span という名前は、 Googleの Dapper ペーパーに由来し、 timespanの短縮名です。 スパンは、コード実行のタイミング、つまり開始時刻と終了時刻を持つアクションを表します。 スパンには、タイム・スタンプと期間の両方で構成されるデータのセットも含まれます。 異なるタイプのスパンは、メタデータ・アノテーションを使用して完成した 1 つまたは複数のデータ・セットを持つことができます。 すべてのトレース・モデルは、64 ビット ID で順序付けられた階層セット内のスパンのブロックで構成され、親 (呼び出し元) スパンと子 (呼び出し先) スパンの間の参照に使用されます。 各トレースでは、最初のスパンがルートとして機能し、その 64 ビット ID がトレース全体の ID になります。

特定のサービスの最初のスパンは、呼び出しがサービスに入ったことを示し、エントリー・スパンと呼ばれます (ダッパー・ペーパーでは、エントリー・スパンの名前は「サーバー・スパン」です)。 サービスを終了する呼び出しのスパンは、出口スパンと呼ばれます (Dapper 用紙では、出口スパンは「クライアント・スパン」と呼ばれます)。 中間スパンは、入り口スパンと出口スパンに加えて、コードの重要なセクションにマークを付けるため、トレース・ランタイムは、正しいコードに明確に起因する可能性があります。

スパン・モデル

各スパンには、 HTTP 呼び出しやデータベース接続などのタイプが関連付けられています。 スパンのタイプに応じて、より多くのコンテキスト・データが関連付けられます。 複数のサービスにわたる一連のスパンを追跡するために、Instana は、インスツルメントされた Exit を使用して相関ヘッダーを自動的に送信します。これらの相関ヘッダーは Instana の Entry によって自動的に読み取られます。 詳細については、 HTTP Tracing Headers をご覧ください。

トレースについて

呼び出しスタック

呼び出しスタック は、コード実行の番号付きリストです。 コードが他のコードを呼び出すたびに、新しいコードがスタックの最上位に配置されます。 Callstacks は、すべてのプログラミング言語のランタイムによって使用され、通常は stacktraceとして出力されます。 エラーが発生すると、スタック・トレースはエラーの原因となった呼び出しに戻ります。

例えば、以下のエラー・メッセージは Apple は数値ではありませんを示しています。 呼び出しスタックと組み合わせると、エラーが発生した複雑なシステムで絞り込むことができます。 NumberUtil アルゴリズムは多くの場所で使用される可能性があるため、通常、メッセージのみでは不十分です。

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

エラーが発生した理由を理解するには、呼び出しスタックを使用して、エラーから関連するビジネス・メソッド (この場合は ShoppingCart.parseQuantity()) までトレースバックします。

呼び出しスタック自体はモニタリングには不十分です。 これらは読み取りが容易ではなく、システムのパフォーマンスと可用性を全体的な正常性に相関させるための情報を提供しません。 コード実行で何が行われるかを確認し、相関させるには、プロセス・アクティビティー、リソース使用量、キューイング、アクセス・パターン、負荷とスループット、システム、およびアプリケーションの正常性などの情報を検討します。

分散トレース

サービス指向アーキテクチャー (SOA) の導入により、呼び出しスタックが分割されています。 例えば、 ShoppingCart ロジックがサーバー A にあり、 NumberUtil がサーバー B にあるとします。 サーバー B のエラー・トレースには、構文解析エラーの短い呼び出しスタックのみが含まれています。 サーバー A では、サーバー B で問題が発生したことを示す新しいエラーが生成されますが、問題自体は示されません。

トラブルシューティングが容易な単一のエラー・コール・スタックではなく、2 つのエラーを持つ 2 つのコール・スタックになります。 また、この 2 つの間には接続が存在しないため、両方に同時にアクセスすることは不可能です。

サーバー A:

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

サーバー B:

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

分散トレースの背後にある考え方は、2 つのエラー呼び出しスタックを相互に接続することによって、この問題を修正することです。 ほとんどの実装では、単純なメカニズムを使用して呼び出しを行います。サーバー A がサーバー B を呼び出すと、アプリケーション・パフォーマンス・モニター (APM) ツールは、APM システム内の呼び出しスタック間の共通参照点として機能する ID を呼び出しに追加します。 このメカニズムは 相関 と呼ばれ、1 つのエラーを生成するために 2 つの呼び出しスタックを結合します。

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"
 

リモート呼び出しが行われる場所と、呼び出しスタックのどのサーバー部分で呼び出しが実行されたかを理解することにより、 ShoppingCart がエラーのコンテキストであり、 NumberUtil が原因でショッピング・カート・アクティビティーが失敗したことを知ることができます。

パフォーマンス測定

ただし、上記の例では、APM ツールが、パフォーマンス測定の実行および表示に使用されるのと同じメカニズムを使用してエラーをトレースすることを示しています。 トレースには、以下のようにパフォーマンス番号の注釈が付けられています。

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

ショッピングカートの更新処理にかかる合計時間は約413ミリ秒です。数値変換(NumberUtil.convert())には5ミリ秒かかりました。その間の時間は多くの呼び出しに分散しているため、顕著な急激な変化を探していることになります。 この例では、カート (ShoppingCart.updateCart()) の更新には合計 411 ミリ秒かかりましたが、構文解析 (ShoppingCart.parseQuantity()) には 211 ミリ秒しかかかりませんでした。これ自体がリモート呼び出しの実行にほとんどの時間を費やしていました。

Instana によるトレース

エラーまたはパフォーマンスの低下が発生した場合は、特定のケースのトラブルシューティングに必要なすべてのデータを使用できるように、詳細なコンテキストが提供されます。 このデータ (呼び出しスタックを含む) は、呼び出しごとに収集されるわけではありません。これは、処理オーバーヘッドを引き起こす可能性がある侵入タスクであるためです。

先の例を参照すると、 Instana を実行すると、次のようにトランザクションが表示されます:

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

表示される出力は、呼び出しのネストと長さをより視覚的に表現したものです。これは、呼び出しが重要な部分に削減され、どこで時間が費やされ、どこでリモート呼び出しが行われたかを示すためです。 また、動的グラフにも接続します。動的グラフは、サービス B サーバー上の CPU が過負荷になっていることを認識し、これを根本原因分析のためにトランザクションに相関させることができます。 その他の関連情報 (サービス URL やデータベース照会など) も収集されます。

トレースの継続性

トレースの継続性とは、1 つの外部要求によって起動された呼び出しが 1 つのトレースに収集されることを意味します。 Instana HTTP ヘッダー、 gRPC メタデータ、 Kafka メッセージヘッダー、AMQPヘッダー、JMSヘッダーなど、プロトコル固有の手法を用いてメタデータを追加します。 メタデータを追加すると、すべてのプロトコルおよびサービスにわたってトレースの継続性が確保されます。

メタデータをサポートしない通信プロトコルは、トレース継続性をサポートしません。つまり、このようなプロトコルを介して別のサービスを呼び出すと、発信呼び出しはトレース・ツリー内のリーフになります。 呼び出しの受信側で行われる作業は、そのトレースの一部ではありません。 代わりに、呼び出しを受信すると新しいトレースが開始され、受信側でトリガーされる後続のすべての呼び出しはこの新しいトレースに属します。

トレースの継続性は、以下の場合にはサポートされません。

  • Kafka バージョン 0.10 まで (Kafka は、バージョン 0.11でヘッダーを導入しました)
  • Node.js パッケージ kafka-node を使用した Kafka メッセージの送受信 (つまり、パッケージはヘッダーをサポートしません)。 Node.js で Kafka を使用する場合は、トレースの連続 kafkajs 性をサポートしているため、 kafka-node の代わりに npmkafkajs パッケージを使用してください。 詳細については、(受信メッセージのトレースを継続するための追加の注意事項 )を参照してください
  • NATS および NATS ストリーミング・メッセージング
  • Microsoft Message Queue

W3C トレースコンテキストのサポート

以下の Instana トレーサーは、や X-INSTANA-T といった独自のヘッダー に加え、 HTTP または X-INSTANA-SHTTPS 通信向けの W3C トレースコンテキスト仕様をサポートしています:

以下の Instana トレーサーは、現在、 W3C トレースコンテキストの指定に対応していません。 プロプラエタリー・ヘッダー ( X-INSTANA-TX-INSTANA-S など) のみがサポートされています。

ヘッダーの追跡

異なるサービス間でトレースの連続性を確保するため、 Instana のトレーサーは、プロトコルに応じて異なるヘッダーやメタデータプロパティを使用します。

HTTP トレース・ヘッダー

Instana トレーサーは、トレース相関のために 2 セットの HTTP ヘッダーをサポートしています。 前者は(X-INSTANA-*) Instana のベンダー固有のヘッダーを含み、後者は W3C トレースコンテキスト仕様書の標準ヘッダーを含みます。 Instana トレーサーは、両方のヘッダー・セットをダウンストリーム要求に追加します。 受信リクエストに両方のヘッダーが含まれている場合、 W3C ヘッダーよりも、それらの X-INSTANA-* ヘッダーが優先されます。 1 セットのヘッダーのみが存在する場合、トレースはそのセットから継続されます。 これにより、他の W3C 準拠の計測機能( OpenTelemetry など)との相互運用性が確保されると同時に、現場で現在も導入されている、 W3C をサポートしていない旧バージョンの Instana トレーサーとの下位互換性も提供されます。

Instana - 特定のトレース相関ヘッダー:

  • X-INSTANA-T: このヘッダーは、進行中のトレースのトレース ID です。 Instana トレーサーは、[ 0-9a-f ] の文字範囲からなる、16文字または32文字の長さのトレースIDをサポートしています。 新規トレースを開始すると、トレース担当者は 16 文字の長さのランダム・トレース ID を生成します。 例えば、7fa8b643c98711efです。
  • X-INSTANA-S: このヘッダーは、クライアント・サイドでの発信 HTTP 要求を表す HTTP 出口スパンのスパン ID です。 Instana tracersは、[ 0-9a-f ]の範囲内の文字からなる16文字の長さのスパンIDをサポートしています。 この ID は、受信サーバー・サイドのエントリー・スパンの親スパン ID になります。 例えば、ff1938c2b29a8010などです。
  • X-INSTANA-L: このヘッダーはトレース・レベルです。 値 0 はスパンが作成されないこと (トレース抑止とも呼ばれる) を意味し、値 1 はスパンが作成されることを意味します。 このヘッダーが欠落している場合、値は 1 と想定されます。 X-INSTANA-L=0を送信するときは、 X-INSTANA-T および X-INSTANA-Sを省略します。

W3C トレース・コンテキスト・ヘッダー:

  • traceparent: このヘッダーには、トレース ID、親スパン ID、および追加フラグが含まれます。 このヘッダーは、 X-INSTANA-TX-INSTANA-Sの組み合わせにほぼ相当します。 詳しくは、 W3C トレース・コンテキスト仕様を参照してください。
  • tracestate: このヘッダーには、進行中のトレース中に収集されるキーと値のペアのリスト (オプション) が含まれています。 詳しくは、 W3C トレース・コンテキスト仕様を参照してください。 Instana トレーサーは、 "in=trace-id;span-id"の形式で、キー in を持つキーと値のペアをこのリストに提供します。
注:HTTP ヘッダーを処理するファイアウォール、プロキシ、または類似のインフラストラクチャを導入している場合は、これら5つのヘッダーすべてを許可リストに追加してください。これは、 HTTP のすべてのバージョンに適用されます。 特に、トレースヘッダーに関しては、 HTTP/1.1 と HTTP/2 に違いはありません。

一般的なメッセージヘッダー

多くのメッセージング・プロトコルでは、同じメッセージ・ヘッダーが HTTPで使用され、ハイフン (-) ではなく下線 (_) が使用されます。 つまり、ヘッダーは X_INSTANA_TX_INSTANA_S、および X_INSTANA_Lです。 個々のヘッダーのセマンティクスについて詳しくは、 HTTP トレース・ヘッダーを参照してください。 このヘッダー・フォーマットを使用するメッセージング・プロトコルを調べるには、以下のセクションの情報を参照してください。

AMQPメッセージヘッダー

Advanced Message Queuing Protocol (AMQP) メッセージの場合、同じメッセージ・ヘッダーが HTTP( X-INSTANA-TX-INSTANA-S、および X-INSTANA-L) を介して使用されます。 現在、 W3C トレース・コンテキスト・ヘッダーは AMQP メッセージをサポートしていません。これは、AMQP メッセージにはそのプロトコルの安定した仕様がまだないためです。 詳しくは、 HTTP トレース・ヘッダーを参照してください。

AWS SNS メッセージ属性

Amazon Simple Notification Service ( AWS SNS ) では、汎用メッセージング属性、すなわち、 X_INSTANA_T X_INSTANA_S、 および が使用されます X_INSTANA_L。 現在、 W3C のトレースコンテキストヘッダーは、 AWS SNS をサポートしていません。これは、 AWS SNS において、そのプロトコルに関する仕様がまだ策定されていないためです。 詳しくは、 汎用メッセージング・ヘッダーを参照してください。

AWS SQS

Amazon Simple Queue Service ( AWS SQS ) では、汎用メッセージングヘッダーである X_INSTANA_T`, X_INSTANA_S `、および `, X_INSTANA_L ` が使用されます。 現在、 W3C のトレースコンテキストヘッダーは、 AWS SQS をサポートしていません。これは、 AWS SQS において、そのプロトコルに関する仕様がまだ策定されていないためです。 詳しくは、 汎用メッセージング・ヘッダーを参照してください。

Google Cloud Pub/Sub

Google Cloud Pub/Subでは、同じメッセージ・ヘッダーが HTTPで使用されますが、すべて小文字 ( x-instana-tx-instana-sx-instana-l) で使用されます。 現在、 W3C トレース・コンテキスト・ヘッダーは、 Google Cloud Pub/Sub をサポートしていません。これは、そのプロトコルに使用可能な仕様がまだないためです。 詳しくは、 HTTP トレース・ヘッダーを参照してください。

GraphQL

GraphQL のトレース相関は、基礎となるトランスポート・プロトコルに依存します。 HTTPを介した GraphQL について詳しくは、 HTTP トレース・ヘッダーを参照してください。 別のプロトコル (AMQP や Kafkaなど) でトランスポートされる GraphQL の照会およびミューテーションについては、その特定のプロトコルのセクションを参照してください。

gRPC メタデータ

gRPC, では、 HTTP と同様に、、 X-INSTANA-SX-INSTANA-T、および といった X-INSTANA-Lメッセージヘッダーが使用されます。 現在、 W3C トレース・コンテキスト・ヘッダーは gRPC をサポートしていません。これは、そのプロトコルではまだ安定した仕様を使用できないためです。 詳しくは、 HTTP トレース・ヘッダーを参照してください。

IBM MQ

IBM MQ では、 Java のトレースにおいて、汎用メッセージヘッダー( X_INSTANA_TX_INSTANA_S、 など)が使用されます X_INSTANA_L。 詳しくは、 汎用メッセージング・ヘッダーを参照してください。

IBM MQ のトレース・ユーザー・エグジットおよび IBM App Connect Enterprise (ACE)のトレース・ユーザー・エグジットは、汎用メッセージング・ヘッダーに加え、 W3C トレース・コンテキスト・ヘッダー(traceparent および tracestate)をサポートしています。

現在、メッセージングプロトコル向けの W3C トレースコンテキスト仕様は存在しません。 W3C HTTP および HTTPS 通信に関する仕様のみを規定しています。 IBM MQ およびACEユーザー・エクジットがメッセージング・プロトコルを介してトレース・コンテキスト・ヘッダーを伝播する場合、および tracestate ヘッダー traceparent は、 HTTP 通信で使用されるのと同じ形式で伝播されます。

JMSトレースヘッダー

Java メッセージサービス(JMS)では、汎用メッセージヘッダーである、 X_INSTANA_SX_INSTANA_T、、および が使用されます X_INSTANA_L。 W3C JMSでは、現時点ではトレースコンテキストヘッダーがサポートされていません。これは、JMSにそのプロトコルに関する仕様がまだ存在しないためです。 詳しくは、 汎用メッセージング・ヘッダーを参照してください。

Kafka ヘッダーの追跡

Kafka トレース・ヘッダーは現在マイグレーション中です。 従来、ヘッダー X_INSTANA_C は、トレース ID と親スパン ID のバイナリー表記で使用されていました。 残念ながら、一部の不完全または非準拠の Kafka ドライバーおよびアプリケーションは、非ストリング・ヘッダーを正しく処理できません。 このため、 Instana のトレーサーは、文字列形式のヘッダー(X_INSTANA_T, X_INSTANA_S)を採用する方向に進んでいます。すべての Instana トレーサーは、 X_INSTANA_C従来のヘッダー()を引き続きサポートしていますが、すでに新しいヘッダー形式() X_INSTANA_T または() X_INSTANA_Sにも対応しています。 このマイグレーションについて詳しくは、 マイグレーションを参照してください。

Kafka のヘッダー X_INSTANA_T および X_INSTANA_S の追跡

Kafka トレース相関には、以下のストリング・ヘッダーが使用されます。

  • X_INSTANA_T: トレース ID はストリングで、常に 32 文字の長さで、必要に応じて左側に 0 が埋め込まれます。 例: "00000000000000007fa8b643c98711ef"
  • X_INSTANA_S: 親スパン ID の長さは 16 文字です。 例: ff1938c2b29a8010
  • X_INSTANA_L_S: トレース・レベル (オプション、タイプ・ストリング)。 値 0 はスパンが作成されないこと (トレース抑止とも呼ばれる) を意味し、値 1 はスパンが作成されることを意味します。 X_INSTANA_L_S ヘッダーが欠落している場合は、値 1 が想定されます。 X_INSTANA_L_S=0を送信する場合は、 X_INSTANA_T および X_INSTANA_S を省略します。
レガシー Kafka トレースヘッダー X_INSTANA_C

ヘッダー・フォーマットのマイグレーション前の Kafka トレース相関には、以下のバイナリー・ヘッダーが使用されます。

  • X_INSTANA_C
  • X_INSTANA_L

X_INSTANA_C (トレース・コンテキスト) ヘッダーは、トレースとスパン ID を結合します。 この値は、24 バイトのバイナリー・ヘッダーです。 最初の 16 バイトはトレース ID で、最後の 8 バイトはスパン ID です。 64 ビット・トレース ID を使用する場合、最初の 8 バイトは 0 です。 プロセスが X_INSTANA_C ヘッダーを持つ Kafka メッセージを受け取り、このヘッダーをトレース ID および親スパン ID のストリング表現に変換する必要がある場合は、以下の規則を適用する必要があります。

  • X_INSTANA_C ヘッダーの最初の 8 バイトがすべて 0 の場合、 X_INSTANA_C の 9 から 16 バイトは、英字 [0-9a-f] から 16 文字のストリングに変換されます。
  • X_INSTANA_C ヘッダーのバイト 1 から 8 に少なくとも 1 つのゼロ以外のバイトが含まれている場合、バイト 1 から 16 は同じアルファベットから 32 文字のストリングに変換されます。 いずれの場合も、バイト 17 から 24 は、英字 [0-9a-f] から 16 文字のストリングに変換されます。

以下の例は、トレース ID、スパン ID ストリング、およびバイナリー X_INSTANA_C ヘッダーの間の変換を示しています。 この変換に必要なのは、文字をストリングからオクテットに直接変換すること、およびその逆を行うことだけです。

64 ビット・トレース ID を使用する場合:

トレース ID スパンID 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

128 ビット・トレース ID を使用する場合:

注:Instana では128ビットのトレースIDは使用されておらず、前述の X_INSTANA_C バイナリヘッダーから文字列ヘッダーへの移行は、128ビットのトレースIDへの移行よりも前に実施されています。 したがって、この表には単なる理論上の価値しかありません。 実際には適用されません。
トレース ID スパンID 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

X_INSTANA_L (整数型) ヘッダーは、トレース・レベルを示します。 値 0 はスパンが作成されないこと (トレース抑止とも呼ばれる) を意味し、値 1 はスパンが作成されることを意味します。 X_INSTANA_L=0を送信するときに X_INSTANA_C ヘッダーを送信しません。