トレースの概念

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

トレースの概念では、分散トレースの一般的な概念と、Instana AutoTrace™ におけるその実装方法について説明します。Instana でトレース可能なテクノロジーとランタイムの詳細については、 「Instana のトレース」 をご覧ください。

トレース

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

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

コール

コールとは、リクエストとレスポンス(非同期)という2つのサービス間の通信を表す。 各コールは、特定のリモート・プロシージャ・コール(RPC)またはサービス・コールに対応するデータと時間の測定値のセットである。 Instana UI 内では、 HTTP、メッセージング、データベース、バッチ、内部など、各タイプのコールが強調表示されます。

通話データを取得するには、発信側と着信側の両方を測定する必要がある。 分散トレースでは、これらの個々の測定値をスパンと呼ぶ。

内部呼び出しは、サービス内部で行われる作業を表す特定のタイプの呼び出しである。 これは、カスタム・トレースを介して送信される中間スパンから作成できます。 カスタムトレーシングを実装して、独自のカスタムインスツルメンテーションを書きたい場合は、Instanaは以下をサポートします。 OpenTelemetry OpenTracingOpenCensusJaegerZipkin Web Trace SDK、または言語ベースのトレース SDK のいずれかをサポートしています。

呼び出しは、エラーが発生した操作を表すことができる。 たとえば、 HTTP 操作を表す呼び出しは、 5xx ステータスコードになるかもしれないし、Javaリモートメソッドインボケーション(RMI)を通 じてAPIを呼び出すと例外が発生するかもしれない。 このような呼び出しはエラーとみなされ、Instana UIでは次の画像のようにマークされます。

注: 4xx はクライアント側のエラーと定義されているため、ステータスコード 4xx をもたらす HTTP 呼び出しはエラーとはみなされない。

トレース・ビュー

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

Instanaのエラーコールは、正常に完了しないサービスコールです。 このエラーは、ネットワークの問題、サーバーのエラー、タイムアウト、アプリケーションレベルの例外など、さまざまな理由で発生します。 Instanaは、メソッド呼び出しの戻り値、スローされた例外、その他の失敗の指標を分析し、これらの誤った呼び出しを特定します。 誤ったコールは、必ずしも HTTP ステータスコードと結びついているわけではない。 Instanaはメソッドレベルでアプリケーションを監視し、メソッドが非成功コードを返したり例外をスローしたりすると、Instanaはその呼び出しをエラーとしてフラグ付けします。

Instanaは、明示的にログに記録されないような誤ったコールも特定できるため、アプリケーションの健全性をより包括的に把握することができます。

スパン

スパンという名前は、 Google 「Dapper paper」に由来し、 タイムスパンの略である。 スパンはコード実行のタイミング、つまり開始時刻と終了時刻を持つアクションを表す。 また、スパンには、タイムスタンプと継続時間の両方からなるデータセットが含まれる。 異なるタイプのスパンは、メタデータの注釈が付いた1つまたは複数のデータセットを持つことができる。 すべてのトレースモデルは、64ビットの識別子によって順序付けされ、親(呼び出し側)と子(呼び出し側)のスパン間の参照に使用される、階層的なセットのスパンのブロックから構成される。 各トレースにおいて、最初のスパンがルートとなり、その64ビット識別子がトレース全体の識別子となる。

特定のサービスの最初のスパンは、コールがそのサービスに入ったことを示し、エントリースパンと呼ばれる(Dapper論文では、エントリースパンは「サーバースパン」と命名されている)。 サービスから退出するコールのスパンは、退出スパンと呼ばれる(Dapperの論文では、退出スパンは「クライアントスパン」と名付けられている)。 エントリー・スパンとエグジット・スパンに加えて、中間スパンはコードの重要なセクションをマークするので、トレース・ランタイムが正しいコードに明確に帰属することができる。

スパンモデル

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

トレースについて

呼び出しスタック

呼び出しスタック は、コード実行の番号付きリストです。 コードが他のコードを呼び出すたびに、新しいコードはスタックの一番上に置かれる。 コールスタックは、あらゆるプログラミング言語のランタイムで使用され、通常はスタックトレースとして出力される。 エラーが発生すると、スタックトレースはエラーに至ったコールをトレースする。

例えば、以下のエラー・メッセージは 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で何か問題が発生したことを示す新しいエラーが発生するが、問題そのものは表示されない。

トラブルシューティングが容易な1つのエラー・コールスタックではなく、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システム内のコールスタック間の共通 参照ポイントとして機能する識別子を呼び出しに追加する。 このメカニズムは 相関 と呼ばれ、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 を使用する場合は、 kafka-node の代わりに npm パッケージ kafkajs を使用してください。 kafkajs はトレースの連続性をサポートしているからです。 詳細については、受信メッセージのトレース継続に関する 補足説明を参照)
  • NATS および NATS ストリーミング・メッセージング
  • Microsoft Message Queue

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

以下の Instana トレーサは、 X-INSTANA-TX-INSTANA-S のような独自ヘッダに加えて、 HTTP や HTTPS の通信のための W3C トレースコンテキスト仕様をサポートしています:

以下の Instana トレーサーは現在、 W3C トレースコンテキスト仕様をサポートしていません。 X-INSTANA-TX-INSTANA-S のような独自のヘッダーのみがサポートされている:

ヘッダーのトレース

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

HTTP トレース・ヘッダー

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

インスタナ固有のトレース相関ヘッダ:

  • X-INSTANA-T:このヘッダーは、進行中のトレースのトレースIDである。 Instana トレーサーは、文字範囲 [ 0-9a-f ] から 16 文字または 32 文字の長さのトレース ID をサポートします。 新しいトレースを開始すると、トレーサーは16文字のランダムなトレースIDを生成する。 例えば、7fa8b643c98711efです。
  • X-INSTANA-S:このヘッダーは、クライアント側の発信 HTTP リクエストを表す HTTP 終了スパンのスパンIDである。 Instanaトレーサーは、文字範囲[ 0-9a-f ]から16文字のスパンIDをサポートしています。 このIDは、受信サーバー側で、エントリー・スパンの親スパンIDとなる。 例えば、ff1938c2b29a8010などです。
  • X-INSTANA-L:このヘッダーはトレースレベルである。 値0はスパンが作成されないことを意味し(トレース抑制としても知られる)、値1はスパンが作成されることを意味する。 このヘッダーがない場合、値は1とみなされる。 X-INSTANA-L=0 を送信する場合は、 X-INSTANA-TX-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_SX_INSTANA_L となる。 個々のヘッダーのセマンティクスについては、 HTTP トレース・ヘッダーを参照。 どのメッセージングプロトコルがこのヘッダー書式を使うかを知るには、 以下のセクションの情報を参照のこと。

AMQPメッセージヘッダ

AMQP(Advanced Message Queuing Protocol)メッセージでは、同じメッセージヘッダーが HTTP 以上、つまり X-INSTANA-TX-INSTANA-SX-INSTANA-L で使用される。 現在のところ、 W3C トレースコンテキストヘッダーはAMQPメッセージをサポートしていない。なぜなら、AMQPメッセージにはまだ安定したプロトコルの仕様がないからである。 詳しくは、 HTTP トレース・ヘッダを参照。

AWS SNSメッセージ属性

Amazon Simple Notification Service ( AWS SNS) では、一般的なメッセージング属性、すなわち X_INSTANA_TX_INSTANA_SX_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-TX-INSTANA-SX-INSTANA-L と同じメッセージヘッダが使われる。 現在、 W3C トレースコンテキストヘッダーは、 gRPC をサポートしていない。なぜなら、このプロトコルにはまだ安定した仕様がないからである。 詳しくは、 HTTP ヘッダーをトレースする

IBM MQ

IBM MQ については、 X_INSTANA_TX_INSTANA_SX_INSTANA_L を含む汎用メッセージング・ヘッダーがJavaトレースで使用される。 詳細については、 汎用メッセージング・ヘッダーを参照のこと。 一般的なメッセージングヘッダーに加え、 IBM MQ Tracingユーザー出口と IBM App Connect Enterprise (ACE) Tracingユーザー出口は、 W3C トレースコンテキストヘッダーをサポートしています。

現在のところ、 W3C メッセージング・プロトコル用のトレース・コンテキスト仕様は存在しない。 W3C は、 HTTP と HTTPS 通信のみの仕様となっている。 IBM MQ、ACEがメッセージング・プロトコルを使用し、 IBM MQ、ACE内部にユーザーが存在し、トレース・コンテキスト・ヘッダを伝搬する必要がある場合、 traceparenttracestate 、 HTTP 通信で使用されるのと同じ形式でヘッダが伝搬される。

JMSトレースヘッダ

Java Message Service (JMS)では、一般的なメッセージング・ヘッダーである X_INSTANA_TX_INSTANA_SX_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_TX_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 (integer型)ヘッダーはトレースレベルを示す。 値0はスパンが作成されないことを意味し(トレース抑制としても知られる)、値1はスパンが作成されることを意味する。 X_INSTANA_L=0 を送信する際は、 X_INSTANA_C ヘッダーを送信しないでください。