Kafka ヘッダーのマイグレーション

サマリー

Instana 今後数か月の間に、 Kafka のトレース相関機能のヘッダー形式を変更します。 アクションを実行する必要はありません。 ヘッダーの形式を確認する必要があるのは、メッセージのサイズが気になる場合に限られます。 移行中は、メッセージサイズがわずかに増加します。 Instana がメッセージに追加するオーバーヘッドは、ほぼすべてのユースケースにおいて無視できる程度です。 ただし、メッセージごとに数バイトを保存する場合は、先を読みます。

バックグラウンド

分散トレーシングを有効にするため、 Instana はリクエストやメッセージにトレースの相関情報を追加します。 正確な形式は、基礎となる通信プロトコルによって異なります。 Kafka のメッセージについて、 Instana は現在、トレースの相関情報をバイナリ形式で送信しています。 Kafka プロトコルでは、ヘッダーに任意のバイナリ値を指定できるため、この動作は Kafka メッセージ形式に完全に準拠しています。 ただし、一部の Kafka クライアントの実装では、バイナリヘッダーの処理が不十分である。 このため、 Instana では、バイナリ値ではなく文字列値を使用して相関ヘッダーを追跡するように変更されます。 通信プロトコルのトレース相関ヘッダーの形式を変更することは、 Instana ではアプリケーションのトレーサーコンポーネントが更新されるタイミングを制御できないため、容易なことではありません。 Instana 特定のトレースに参加するすべてのトレーサーが同時に更新されるとは限らない。 さらに、トレーサーがメッセージに注入するヘッダー・フォーマットは、そのメッセージを受信するサービスをモニターするトレーサーによって理解される必要があります。 したがって、後方互換性のある方法でマイグレーションを実行することが重要です。 しばらくの間、この移動を準備しました。すべてのトレーサーは、古いヘッダー・フォーマットと新しいヘッダー・フォーマットの両方を既に処理できます。

要約すると、このマイグレーションは複数のフェーズで実装され、移行期間を考慮して、 Kafka 全体のトレース相関が常にすぐに使用できるようにします。

Tracerのバージョン

以下のトレーサー・バージョンは、新しいストリング・ヘッダー・フォーマットを処理する準備ができています。また、メッセージの送信時に使用するヘッダー・フォーマットを構成することもできます。 Kafka メッセージを送信するサービスのヘッダー・フォーマットを明示的に 構成 する場合を除き、これらのトレーサー・バージョンに即時に更新する必要はありません。 とはいえ、 Instana では、トレーサーを定期的に更新することを常にお勧めしています。

ランタイム バージョン リリース日付 Comment
Golang instasarama@v1.2.0 2022 年 5 月 25 日 このトレーサーは、最新のパッケージ・バージョンをインストールすることによって手動で更新されます。
Java Java トレースセンサー 1.2.413 2022年5月31日 このトレーサーは通常、 Instana エージェントによって自動的に更新されます。
.NET Core Instana.Tracing.Core@1.228.1 2022年7月7日 このトレーサーは、最新のNuGetバージョンをインストールすることで手動で更新されます( Kubernetes AutoTrace のWebhookを使用している場合を除く)。
Node.js @instana/collector@2.3.0 2022年5月24日 このトレーサーは、最新の npm パッケージをインストールすることで手動で更新されます( Kubernetes の AutoTrace ウェブフックを使用している場合を除く)。

ここにリストされているランタイム以外のその他のランタイムは、この変更の影響を受けません。

さらに、以下のトレーサー・バージョンは、デフォルトで両方のヘッダー・フォーマットを送信します。

ランタイム バージョン リリース日付 Comment
Golang instasarama@v1.5.0 2022年10月4日 このトレーサーは、最新のパッケージ・バージョンをインストールすることによって手動で更新されます。
Java Java トレースセンサー 1.2.425 2022年10月4日 このトレーサーは通常、 Instana エージェントによって自動的に更新されます。
.NET Core Instana.Tracing.Core@1.235.1 2022年10月5日 このトレーサーは、最新のNuGetバージョンをインストールすることで手動で更新されます( Kubernetes AutoTrace のWebhookを使用している場合を除く)。
Node.js @instana/collector@2.10.0 2022年10月5日 このトレーサーは、最新の npm パッケージをインストールすることで手動で更新されます( Kubernetes の AutoTrace ウェブフックを使用している場合を除く)。

最後に、以下のトレーサー・バージョンは、デフォルトでストリング・ヘッダー・フォーマットのみを送信します。 ヘッダー・フォーマットの構成 (存在する場合) は無視されます。

ランタイム バージョン リリース日付 Comment
Golang instasarama@v1.24.0 2024年6月24日 このトレーサーは、最新のパッケージ・バージョンをインストールすることによって手動で更新されます。
Java
.NET Core Instana.Tracing.Core@1.274.1 2024 年 6 月 10 日 このトレーサーは、最新のNuGetバージョンをインストールすることで手動で更新されます( Kubernetes AutoTrace のWebhookを使用している場合を除く)。
Node.js @instana/collector@4.0.0 2024年10月16日 このトレーサーは、最新のパッケージ・バージョンをインストールすることによって手動で更新されます。
Python @instana@3.5.0 2025年7月1日 このトレーサーは、最新のパッケージバージョンをインストールすることで手動で更新されます( Kubernetes AutoTrace の Webhook を使用している場合を除く)。

移行の段階

フェーズ 0

このフェーズでは、トレーサーはデフォルトでバイナリヘッダ'X_INSTANA_Cと'X_INSTANA_L送信する。

バイナリー・ヘッダーの代わりにストリング・ヘッダーを送信することも、両方のヘッダー・セットを送信することもできます。 詳しくは、 構成オプションを参照してください。

メッセージが受信されると、トレーサーは両方のヘッダー・セットを検索し、両方のヘッダー・フォーマットからトレースを続行できます。

このフェーズは、 フェーズ 1の開始で終了しました。

フェーズ 1

注: これは移行の現在の段階です。

現時点では、すべてのトレーサーは、デフォルトでバイナリと文字列の両方のヘッダーを送信します。つまり、'X_INSTANA_Cと 'X_INSTANA_Lと 'X_INSTANA_Tと 'X_INSTANA_S です。 この移行フェーズにより、トレーサーを IT インフラストラクチャー全体にわたって段階的にアップグレードすることができます。

Instana ヘッダーが2つではなく4つ付加されることを懸念される場合は、メッセージヘッダーのオーバーヘッドを最適化するために、以下の移行戦略を適用することができます:

  1. Kafka メッセージを送信するすべてのサービスがバイナリー・ヘッダーのみを送信するように構成します。 構成オプションを参照してください。
  2. 2023 年 9 月より前のある時点で、すべてのトレーサーが、両方のヘッダー・フォーマットをサポートする バージョン にアップグレードされていることを確認してください。
  3. Kafka メッセージを送信するすべてのサービスが string ヘッダーのみを送信するように構成します。 構成オプションを参照してください。 この設定を使用すると、サービスは進行中のマイグレーションの影響を受けなくなります。
  4. すべてのトレーサーがフェーズ 2 バージョンにアップグレードされた後、ヘッダー・フォーマットの構成を削除できます。 ただし、構成がそのままになっていても無視されます。

また、すべてのトレーサーが既に新しい バージョン にアップグレードされている場合は、ステップ 1 をスキップして、新しいヘッダー・フォーマットを直接使用することもできます。

フェーズ 2

このフェーズは、約 2023 年 9 月に開始します。

このフェーズから、 Instana のトレーサーは、デフォルトで従来のバイナリヘッダー形式から新しい文字列ヘッダー形式への送信に切り替わります。 ヘッダー形式の構成 (存在する場合) は無視されます。 これは、マイグレーションの最終フェーズです。

構成オプション

Kafka ヘッダー・フォーマットは、 ホスト・エージェント構成で 、または 環境変数を使用して、2 つの異なる方法で構成できます。

エージェントの設定オプション

com.instana.tracing.kafka.header-formatbinarystring、または bothに設定します。 以下は、構成例を示しています。

com.instana.tracing:
  kafka:
    header-format: both # possible values: binary, both, string
 

Kafka メッセージへのヘッダーの注入を完全に無効にするオプションが提供されています。 以下の設定例を参照してください。

注: この設定を行うと、 Kafka におけるトレースの相関機能が完全に無効になります。 この設定を行うことは推奨されません。トレースが分割されてしまうためです。最初のトレースは「 Kafka 」メッセージを生成するサービスで終了し、「 Kafka 」メッセージを受信するサービスでは新しいトレースが開始されます。
com.instana.tracing:
  kafka:
    trace-correlation: false
 

環境変数

  • モニター対象プロセスに環境変数 INSTANA_KAFKA_HEADER_FORMAT を設定します。 環境変数の有効な値は、 binarystring、または bothです。
  • Kafka メッセージへのヘッダーの注入を完全に無効にするオプションも用意されています。 これにより、 Kafkaのトレース相関も無効になります。 この設定は INSTANA_KAFKA_TRACE_CORRELATION=falseです。

ヘッダー名

ヘッダー・フォーマットについて詳しくは、 Kafka ヘッダーのトレースのセクションを参照してください。

レガシー/バイナリヘッダー

レガシーモードでは、Kafkaメッセージのトレース相関は、バイナリコンテンツを持つ2つのヘッダー'X_INSTANA_Cと'X_INSTANA_Lを使用します。

モダン/ストリングヘッダー

マイグレーション後、またはストリング・ヘッダーを送信するように構成した場合、 Kafka メッセージのトレース相関は、ヘッダー X_INSTANA_TX_INSTANA_S (およびオプションで X_INSTANA_L_S) を使用します。 3 つのヘッダーはすべて、ストリング値とともに送信されます。