OpenTelemetryと連携するためのAPM Javaエージェントの構成

APM Javaエージェントは、OpenTelemetryと連携するように構成できます。

APM Java Agentのインストゥルメンテーションおよびモニタリングを引き続き使用し、既存のOpenTelemetryモニタリングに接続できます。

既存のOpenTelemetryエージェントをAPMとともに使用できるようにする場合は、OpenTelemetryおよびその他のトレーサの構成を参照してください。

ノート

OpenTelemetry Javaエージェントの自動インストゥルメンテーション(opentelemetry-javaagent.jar)はサポートされていません。この機能は、OpenTelemetry APIを使用して手動インストゥルメンテーションを実行し、独自のスパン/トレース(opentelemetry-api)を作成するアプリケーション/ライブラリと連携することを目的としています。

APM Javaエージェントが構成されると、APM Javaエージェント・ハイブリッド・モードと同様に機能します。ただし、OpenTracing APIとともにOpenTelemetry APIでも機能します。

この項のトピックは次のとおりです:

ノート

W3C手荷物の伝播は、APM Javaエージェント1.17リリース以降でサポートされています。

トレーサのみのシナリオは使用できません。ただし、APM JavaエージェントがOpenTelemetryを使用するように構成されている場合、そのデフォルト値はW3Cに調整されます。これは、OpenTelemetryがデフォルトで使用する形式です。

APMエージェントでのOpenTelemetryの有効化

APM Javaエージェントは、OpenTelemetryトレースおよびメトリックをサポートしています。次のプロパティを使用して、手動インストゥルメンテーションおよびカスタム・メトリックに対してOpenTelemetryを有効にします。

プロパティ・タイプおよび説明 プロパティ デフォルト

AgentConfig.properties

oracle-apm-agent/config/<version>ディレクトリにあるAgentConfig.propertiesファイルを更新します。

com.oracle.apm.agent.otel false com.oracle.apm.agent.hybrid=false

システム・プロパティ

システム・プロパティを更新します。

com.oracle.apm.agent.otel false com.oracle.apm.agent.otel=false

環境変数

環境変数を更新します。

com_oracle_apm_agent_otel false

Windowsの場合: set com_oracle_apm_agent_otel=false

Linuxの場合: export com_oracle_apm_agent_otel=false

ノート

OpenTelemetryにはJava 8以上が必要です。プロパティcom.oracle.apm.agent.otel=falseは、Java 7以下で適用されます。

APM Javaエージェントの起動時に、OpenTelemetryインスタンスが起動されます。OpenTelemetryインスタンスには、GlobalOpenTelemetry.get()を使用してアクセスできます。

他のOpenTelemetryバージョンの使用

APM Javaエージェント1.14には、OpenTelemetry 1.38.0ライブラリが組み込まれています。APM JavaエージェントはOpenTelemetryの手動インストゥルメンテーションをサポートしているため、プロジェクトが依存するAPIバージョンは異なる場合があります。

新しいOpenTelemetryバージョンのAPIは、通常、古いバージョンとの下位互換性があります。ユーザーは、APM Javaエージェントの組込みOpenTelemetry 1.38.0を新しいバージョンでオーバーライドできます。他のOpenTelemetryバージョンを使用するには、次のステップを実行します。
  1. エージェント・ホーム・ディレクトリにopentelemetryディレクトリを作成します。例: oracle-apm-agent/opentelemetry
  2. 新しいディレクトリで使用するOpenTelemetryライブラリをコピーします。

    ライブラリには、次のアーティファクトIDが必要です。また、opentelemetryで始まらないものは、opentelemetryのライブラリによって異なります。

    • opentelemetry-api

    • opentelemetry-apiインキュベータ

    • opentelemetryコンテキスト

    • opentelemetry-exporter-common

    • opentelemetry-exporter-otlp

    • opentelemetry-exporter-otlp-common

    • opentelemetry-exporter-sender-okhttp

    • opentelemetry-extension-trace-propagators

    • opentelemetry-sdk

    • opentelemetry-sdk-common

    • opentelemetry-sdk-extension-autoconfigure

    • opentelemetry-sdk-extension-autoconfigure-spi

    • opentelemetry-sdkログ

    • opentelemetry-sdkメトリック

    • opentelemetry-sdk-trace

    • 注釈
    • kotlin-stdlib
    • kotlin-stdlib-common
    • kotlin-stdlib-jdk7
    • kotlin-stdlib-jdk8
    • okhttp

    • okio-3.6.0.jarokio-jvm

    ノート

    OpenTelemetryバージョンが異なるライブラリには、ライブラリ名が異なる場合があります。
  3. oracle-apm-agent/bootstrap/ApmAgent.jarを更新するには、-overwriteオプションを指定してAPM apm-java-agent-installer provision-agent-upgradeコマンドを使用します。

    このステップは、カスタムのopentelemetryライブラリを使用するようにApmAgent.jarを更新するために必要です。例:

    java -jar apm-java-agent-installer-<version>.jar provision-agent-upgrade -destination=<oracle-apm-agent_parent_path> -overwrite

伝播設定

APM Javaエージェントの伝播タイプ処理の詳細は、「OpenTelemetryおよびその他のトレーサの構成」を参照してください。

デフォルトでは、伝播を処理するためにB3 (マルチヘッダー)形式が使用されます。ただし、APM JavaエージェントがOpenTelemetryと連携するように構成されている場合、このデフォルト値は、OpenTelemetryがデフォルトで使用する形式であるW3Cに調整されます。

AgentConfig.propertiesファイルでパラメータcom.oracle.apm.agent.tracer.propagation.typeを指定すると、デフォルトの動作がオーバーライドされ、任意の伝播タイプを使用できます。また、すべてを接続して連携させるには、次のものも調整する必要があります。
  • OpenTelemetry更新: OpenTelemetryには、使用するプロパゲータを変更するための独自のプロパティがあります。

    システム・プロパティotel.propagatorsまたは環境変数OTEL_PROPAGATORSを使用して、プロパゲータを更新できます。値の詳細は、https://opentelemetry.io/docs/languages/sdk-configuration/general/#otel_propagatorsを参照してください

    ノート

    APM Javaエージェントがデフォルトで使用するのと同じB3ヘッダー形式を使用するようにOpenTelemetryを変更する場合は、b3multiプロパゲータを使用するようにOpenTelemetryを更新します。伝播にB3SINGLEを使用している場合は、OpenTelemetryを更新してB3プロパゲータを使用します。

  • ブラウザ・エージェントの更新: ブラウザ・エージェントのインジェクションを使用している場合は、別の伝播タイプを使用するようにjavascriptを更新する必要があります。デフォルトでは、B3 (マルチヘッダー)が使用されます。詳細は、Ajaxコール・インストゥルメンテーションの構成を参照してください。