APM Javaエージェントのデプロイ
APM Javaエージェントが正常にプロビジョニングされたら、APM Javaエージェントをデプロイできます。
任意のJavaアプリケーションにAPM Javaエージェントをデプロイするには、JVM起動スクリプトに-javaagentパラメータを追加する必要があります。Java環境、アプリケーション・サーバーまたはマイクロサービスに応じて、ユーザーはシェルまたはバット起動スクリプト、またはJavaコマンドラインを実行する別の方法を使用できます。
APM Javaエージェントを次のJavaアプリケーションにデプロイする方法は、次の例を参照してください。
Oracle WebLogic Server
ここでは、APM JavaエージェントをOracle WebLogic Serverにデプロイする方法について説明します。
- アプリケーション・サーバーの宛先ディレクトリを指すように変数を設定します。これは、APM Javaエージェントがプロビジョニングされるディレクトリです。
Oracle WebLogic Serverドメイン・ディレクトリを指すように
$DOMAIN_HOME変数を設定し、APM Javaエージェントが同じ宛先ディレクトリにプロビジョニングされたことを確認してから、次のステップを実行します。アプリケーション・サーバー 宛先ディレクトリ変数情報 Oracle WebLogic Server Oracle WebLogic Serverドメインを指すように $DOMAIN_HOME変数を設定します。export DOMAIN_HOME=<Oracle WebLogic Server Domain> startWebLogic.shファイルのバックアップ・コピーを作成します:cd $DOMAIN_HOME/bin cp startWebLogic.sh startWebLogic.sh.orig- テキスト・エディタを使用して元の
startWebLogic.shスクリプトを編集し、-javaagentオプションを追加します。- APM JavaエージェントをOracle WebLogic Administration Serverと管理対象サーバーにデプロイする場合は、
setDomainEnv.shコールの後に、次の-javaagentオプションをJAVA_OPTIONSのセットに追加します:JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:$DOMAIN_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar" - APM Javaエージェントを管理対象サーバーのみにデプロイする場合は、
setDomainEnv.shコールの後に、JAVA_OPTIONSのセットのif文の中に次の-javaagentオプションを追加します:if [ "$SERVER_NAME" != "AdminServer" ] ; then set JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:$DOMAIN_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar" fi
- APM JavaエージェントをOracle WebLogic Administration Serverと管理対象サーバーにデプロイする場合は、
- Oracle WebLogic Serverを停止してから再起動します:
cd $DOMAIN_HOME/bin ./stopWebLogic.sh cd .. nohup ./startWebLogic.sh >& startup.log &管理対象サーバーがある場合は、それらも同様に停止してから再起動します:
cd $DOMAIN_HOME/bin ./stopManagedWebLogic.sh {SERVER_NAME} {ADMIN_URL} {USER_NAME} {PASSWORD} nohup ./startManagedWebLogic.sh {SERVER_NAME} {ADMIN_URL} >& {SERVER_NAME}.log &ノート
$DOMAIN_HOME/binバージョンを編集した場合でも、$DOMAIN_HOMEバージョンのstartWebLogic.shが使用されることに注意してください。1レベル上位から($DOMAIN_HOMEから)コマンドを呼び出すと、下位レベルから($DOMAIN_HOME/binから)コマンドが呼び出されます。ただし、stopWebLogic.shコマンドは$DOMAIN_HOME/binディレクトリからコールされます。
APM Javaエージェントが正常にデプロイされると、サーバー起動ログにOracle APM Agent: Initialized AgentInstanceというメッセージが表示されます。
Apache Tomcatサーバー
ここでは、APM JavaエージェントをApache Tomcatサーバーにデプロイする方法について説明します。
- アプリケーション・サーバーの宛先ディレクトリを指すように変数を設定します。これは、APM Javaエージェントがプロビジョニングされるディレクトリです。
Apache Tomcatサーバーの宛先ディレクトリを指すように
$CATALINA_HOME変数を設定し、APM Javaエージェントが同じ宛先ディレクトリにプロビジョニングされたことを確認してから、次のステップを実行します。アプリケーション・サーバー 宛先ディレクトリ変数情報 Apache Tomcatサーバー Apache Tomcatサーバーの宛先ディレクトリを指すように $CATALINA_HOME変数を設定します。- Bashシェルを使用している場合:
export CATALINA_HOME=<Apache Tomcat Server destination directory> - Cシェルを使用している場合:
setenv CATALINA_HOME "<Apache Tomcat Server destination directory>"
- Bashシェルを使用している場合:
catalina.shファイルのバックアップ・コピーを作成します。$ cd $CATALINA_HOME/bin $ cp catalina.sh catalina.sh.orig- テキスト・エディタを使用して元の
catalina.shファイルを編集し、CATALINA_OPTSに次の-javaagentオプションを追加します。変更は、サーバーの起動時に実行されない可能性のあるif文またはコード・ブロックの外部で行います。これにより、-javaagentフラグが常にサーバー起動オプションに追加されます。CATALINA_OPTS="${CATALINA_OPTS} -javaagent:$CATALINA_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar" - Apache Tomcatサーバーを停止してから再起動します:
$ cd $CATALINA_HOME/bin $ ./shutdown.sh $ ./startup.sh
APM Javaエージェントが正常にデプロイされると、サーバー起動ログにOracle APM Agent: Initialized AgentInstanceというメッセージが表示されます。
詳細は、Tomcatアプリケーション・サーバーへのAPM Javaエージェントのインストールに関するチュートリアルを参照してください。
Jettyサーバー
ここでは、APM JavaエージェントをJettyサーバーにデプロイする方法について説明します。
- アプリケーション・サーバーの宛先ディレクトリを指すように変数を設定します。これは、APM Javaエージェントがプロビジョニングされるディレクトリです。
Jetty Serverの宛先ディレクトリを指すように
JETTY_HOME変数を設定し、APM Javaエージェントが同じ宛先ディレクトリにプロビジョニングされたことを確認してから、次のステップを実行します。 - Jettyサーバーを起動します。
java -javaagent:/<Destination_Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar $JETTY_HOME/start.jar
APM Javaエージェントが正常にデプロイされると、サーバー起動ログにOracle APM Agent: Initialized AgentInstanceというメッセージが表示されます。
Spring Boot
ここでは、埋込みApache Tomcatを実行しているSpring BootマイクロサービスにAPM Javaエージェントをデプロイする方法について説明します。
application.propertiesファイルに次のプロパティを追加して、Apache Tomcat Mbeansを有効にしたことを確認する必要もあります:spring.jmx.enabled=true
server.tomcat.mbeanregistry.enabled=trueまたは、前述のプロパティspring.jmx.enabledおよびserver.tomcat.mbeanregistry.enabledをコマンドラインでシステム・プロパティとして追加します。
-javaagentオプションをマイクロサービスの起動スクリプトに追加します。<Destination Directory>は、エージェントをプロビジョニングしたディレクトリを示します。java -javaagent:<Destination Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar target/<microservice.jar>APM Javaエージェントが正常にデプロイされると、マイクロサービス起動ログにOracle APM Agent: Initialized AgentInstanceというメッセージが表示されます。
JBossサーバー
ここでは、APM JavaエージェントをJBossサーバーにデプロイする方法について説明します。
次の手順は、JBoss EAPおよびWildflyに適用できます。
- アプリケーション・サーバーの宛先ディレクトリを指すように変数を設定します。これは、APM Javaエージェントがプロビジョニングされるディレクトリです。
次のステップを実行する前に、JBossサーバーの宛先ディレクトリを指すように
$JBOSS_HOME変数を設定し、APM Javaエージェントが同じ宛先ディレクトリにプロビジョニングされていることを確認します。アプリケーション・サーバー 宛先ディレクトリ変数情報 JBossサーバー JBossサーバーの宛先ディレクトリを示すように
$JBOSS_HOME変数を設定します。- Bashシェルを使用している場合:
export JBOSS_HOME=<JBoss Server destination directory> - Cシェルを使用している場合:
setenv JBOSS_HOME "<JBoss Server destination directory>"
- Bashシェルを使用している場合:
standalone.confファイルのバックアップ・コピーを作成します。cd $JBOSS_HOME/bin cp standalone.conf standalone.conf.orig- テキスト・エディタを使用して元の
standalone.confファイルを編集し、次のJavaオプションをJAVA_OPTSに追加します。変更は、サーバーの起動時に実行されない可能性のあるif文またはコード・ブロックの外部で行います。-javaagentオプションをJAVA_OPTSに追加します。JAVA_OPTS="$JAVA_OPTS -javaagent:$JBOSS_HOME/oracle-apm-agent/bootstrap/ApmAgent.jar"- Javaプロパティ
jboss.modules.system.pkgsを編集して、"com.oracle.apm"を含めます。例:
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager,com.oracle.apm"ノート
各環境は異なります。Jbossサーバーのプロパティには、前述の例とは異なるパッケージが含まれている場合があります。
- JBoss Serverを停止してから再起動します。
cd $JBOSS_HOME/bin ./jboss-cli.sh -c :shutdown nohup ./standalone.sh -b 0.0.0.0&> startup.log &
APM Javaエージェントが正常にデプロイされると、サーバー起動ログにOracle APM Agent: Initialized AgentInstanceというメッセージが表示されます。
DockerおよびKubernetes
ここでは、APM JavaエージェントをDockerコンテナおよびOracle Container Engine for Kubernetes (OKE)にデプロイする方法について説明します。
Dockerコンテナ・イメージへのAPM Javaエージェントのデプロイ
ここでは、APM JavaエージェントをDockerコンテナ・イメージおよびOracle Container Engine for Kubernetes (OKE)にデプロイする方法について説明します。
図3-1 Dockerコンテナ・イメージへのAPM Javaエージェントのデプロイ

推奨:
このオプションは、Dockerコンテナ・イメージを変更できる場合に使用します。
たとえば、APMエージェント構成を変更する必要がある場合、Dockerイメージを変更できます。
APM Javaエージェントをデプロイするには、次のステップを実行します。
- 続行する前に、前提条件を完了し、APM Javaエージェントをプロビジョニングしたことを確認します。
ノート
APM Javaエージェントをプロビジョニングする場合は、それをローカル・マシンの任意の場所にプロビジョニングしてから、Dockerイメージにコピーすることをお薦めします。 Dockerfileを変更して、APM JavaエージェントをDockerイメージにコピーします:COPY <DESTINATION_DIRECTORY>/oracle-apm-agent <Docker_Image_Directory>/oracle-apm-agent/<DESTINATION_DIRECTORY>は、APM Javaエージェントをプロビジョニングしたローカル・マシン上の場所を示し、<Docker_Image_Directory>は、APM Javaエージェントのコピー先のDockerイメージ内のディレクトリを示します。Oracle WebLogic Serverを使用している場合は、<Docker_Image_Directory>をDockerのアプリケーション・サーバー宛先ディレクトリ(たとえば、$DOMAIN_HOME)にすることもできます。- 次の
-javaagentオプションをアプリケーション・サーバーの起動スクリプトに追加します:java -javaagent:<Docker_Image_Directory>/oracle-apm-agent/bootstrap/ApmAgent.jar -jar target/<appserver.jar> - 組込みのAPM Javaエージェントおよび変更済の起動スクリプトを使用して新しいDockerイメージをビルドし、そのイメージをレジストリにプッシュします。
Kubernetesを使用してDockerコンテナを管理する場合は、新しいDockerイメージを使用するようにKubernetes構成を更新してから、Kubernetesポッドを再起動します。
また、Kubernetesポッドのデプロイメント仕様(yamlファイル)で次の環境およびボリューム設定をコピーすることで、Downward APIを使用してKubernetesポッドからレポートされる追加のディメンションを設定できます。Downward APIの詳細は、KubernetesドキュメントのDownward APIを参照してください。
環境設定
spec:
containers:
- name: <container-name>
image: image: <your-registry>/<your-docker-image>:latest
env:
- name: APM_ATTRIBUTES_K8S_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: APM_ATTRIBUTES_K8S_NAMESPACE_NAME
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: APM_ATTRIBUTES_K8S_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNameボリューム設定
spec:
containers:
- name: <container-name>
image: image: <your-registry>/<your-docker-image>:latest
volumeMounts:
- name: apm-attributes-k8s
mountPath: /etc/apm-attributes-k8s
volumes:
- name: apm-attributes-k8s
downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "annotations"
fieldRef:
fieldPath: metadata.annotationsKubernetesデプロイメントにラベル、注釈またはその両方がない場合、同じDownward APIではアプリケーションのデプロイ時にエラーが発生します。この場合、metadata.labels、metadata.annotationsまたはその両方に対応するDownward APIエントリを削除する必要があります。
OpenTelemetry演算子を使用したAPM Javaエージェントのデプロイ
ここでは、OpenTelemetry演算子を使用してAPM Javaエージェントをデプロイし、Kubernetes (K8s)クラスタで実行されているJavaアプリケーション・ポッドにAPM Javaエージェントを自動的に注入および構成する方法について説明します。
図3-2 OpenTelemetry演算子を使用したAPM Javaエージェントのデプロイ

推奨:
このオプションは、Dockerコンテナ・イメージを更新できず、起動時にAPMエージェントをJVMに自動的に注入するために、Kubernetesカスタム・リソース(CR)を使用してAPM Javaエージェント構成を変更する場合に使用します。
- Dockerイメージ・バージョニングの場合、本番環境でコンテナをデプロイするときにタグ
:latestを使用することは避けてください。これは、実行中のイメージのバージョンを追跡するのが難しく、適切にロールバックするのが難しくなるためです。かわりに、v1.12.1.3などの意味のあるタグを指定します。 -
Kubernetesの場合は、Kubernetesカスタム・リソース(CR)および構成マップのバックアップを取得します。
前提条件: OpenTelemetry OperatorをKubernetesクラスタにインストールします。
Operator release manifest、Operator helm chart、または Operator Hubの3つの異なるオプションを使用できます。
ほとんどの場合、cert-managerをインストールする必要があります。ヘルムチャートオプションを使用する場合は、代わりに自己署名証明書を生成するオプションがあります。
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.2/cert-manager.yamlOpenTelemetry演算子をインストールするには、次を実行します:
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yamlAPM Javaエージェントのデプロイ
APM Javaエージェントをデプロイするには、次のステップを実行します。
- Kubernetesカスタム・リソース(CR)を作成します。
自動インストゥルメンテーションを管理するには、OpenTelemetry演算子に、カスタム・リソース定義(CRD)を使用して実行されるAPM Javaエージェントとその構成に関する情報を指定する必要があります。
オペレータがこのカスタム・リソースを使用して、エージェントをポッドにコピーし、必要な構成を追加します。
CRを作成するには、次を実行します。kubectl apply -f - <<EOF apiVersion: opentelemetry.io/v1alpha1 kind: Instrumentation metadata: name: inst-apm-java namespace: opentelemetry-operator-system spec: java: image: container-registry.oracle.com/oci_observability_management/oci-apm-java-agent:1.15.0.516 env: - name: OTEL_com_oracle_apm_agent_data_upload_endpoint value: <data-upload-endpoint> - name: OTEL_com_oracle_apm_agent_private_data_key value: <private-data-key> EOF説明:- <data-upload-endpoint>は、APMドメインの作成時に生成されるデータ・アップロード・エンドポイントURLです。詳細は、データ・アップロード・エンドポイントとデータ・キーの取得を参照してください。
- <private-data-key>は、APMドメインの作成時に生成されるAPM Javaエージェント・インストールのプライベート・データ・キーです。詳細は、データ・アップロード・エンドポイントとデータ・キーの取得を参照してください。
作成されたCRは、次のコマンドを実行して問い合せることができます。
自動インストゥルメンテーションが正しく機能するには、すべてのエンドポイントおよび環境変数が正しい必要があります。kubectl get otelinst -n opentelemetry-operator-system - Kubernetesアノテーションを追加します。
OpenTelemetry演算子は、Kubernetes注釈を使用して、APM Javaエージェントで自動インジェクトするポッドを決定します。
注釈はネームスペースに追加できます。その場合、そのネームスペース内のすべてのポッドが注入されます。注釈は、デプロイメント、ステートフルセットおよびその他のリソースの一部として使用可能な個々のPodSpecオブジェクトに追加することもできます。
注釈:instrumentation.opentelemetry.io/inject-java: "opentelemetry-operator-system/inst-apm-java"ネームスペースの編集を開始するには、次を実行します:- 次のコマンドを実行します:
kubectl edit namespace <your-namespace-name> - エディタを開いたらネームスペースを編集します。たとえば、
viエディタなどを使用します。 - 注釈をネームスペースに追加します。インデントは、有効なYAMLファイルとして作成することが非常に重要です。
例:apiVersion: v1 kind: Namespace metadata: labels: kubernetes.io/metadata.name: mynamespace annotations: instrumentation.opentelemetry.io/inject-java: "opentelemetry-operator-system/inst-apm-java" name: mynamespace spec: - 次のコマンドを実行します:
- Kubernetesポッドを再起動します。
APM Javaエージェントを自動インジェクトするポッドを再起動するには、次を実行します:
kubectl delete pod <your-pod-name> -n <your-namespace-name> - Kubernetesポッドを確認します。
再起動後にAPM Javaエージェントでポッドが自動インジェクトされたことを確認するには、次を実行します:
kubectl get pod <your-pod-name> -n <your-namespace-name> -o yaml
次のステップ(APM Javaエージェント・デプロイメントの検証)に移動できるようになりました。
OpenTelemetry Operatorを使用してAPM Javaエージェントをデプロイする方法の詳細は、ブログ(OpenTelemetry Operatorを使用してKubernetes環境にAPM Javaエージェントを自動的にデプロイ)を参照してください
マウントされたボリュームへのAPM Javaエージェントのデプロイ
マウントされたボリュームを使用してAPM JavaエージェントをOracle Container Engine for Kubernetes (OKE)にデプロイする方法について説明します。
図3-3マウントされたボリュームへのAPM Javaエージェントのデプロイ

-
このオプションは、Dockerコンテナ・イメージを変更できず、APM Javaエージェントへの変更が必要なときに共有マウント・ボリュームを使用する場合に使用します。
- 例1: APMエージェントに頻繁な構成変更を行う必要がある場合、コンテナ・イメージは更新する必要がありますが、実行できません。
- 例2: APMエージェントをデプロイしているユーザーに、コンテナ・イメージを再構築するために必要なアクセス権または権限がない場合。
-
dockerイメージ・バージョニングの場合は、バイナリ・ファイルと構成ファイルをバックアップします。
マウントされたボリュームにAPM Javaエージェントをデプロイするには、次のステップを実行します。
- APM Javaエージェントの前提条件タスクを完了したことを確認します。
APMドメインの作成時に、データ・アップロード・エンドポイントおよびデータ・キーをノートにとります。
- ポッドをマウントする新しいファイルシステムを作成します。
ファイル・システムを作成する際には、Kubernetesで使用されているものと同じVirtual Cloud Network (VCN)コンパートメントを選択することが重要です。同じことをサブネット・コンパートメントに対して行います。
- ファイル・システムをポッドにマウントします。
このステップでは、対応するyamlファイルを編集する必要があります。
次のyamlファイルを使用して、Kubernetesに
PersistentVolumeおよび関連エンティティを作成します。環境用に編集する必要があるフィールドmntTargetId、serverおよびpathに注意してください。kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: oci-fss provisioner: oracle.com/oci-fss parameters: mntTargetId: ocid1.mounttarget.oc1.iad.xxxxxxxxxxxxxxxxxxxxxx --- apiVersion: v1 kind: PersistentVolume metadata: name: oke-fsspv spec: storageClassName: oci-fss capacity: storage: 10Gi accessModes: - ReadWriteMany mountOptions: - nosuid nfs: # Replace this with the IP of your FSS file system in OCI server: 10.0.10.39 # Replace this with the Path of your FSS file system in OCI path: "/fss-for-kub" readOnly: false --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: oke-fsspvc spec: storageClassName: oci-fss accessModes: - ReadWriteMany resources: requests: # Although storage is provided here it is not used for FSS file systems storage: 10Gi volumeName: oke-fsspv変更を適用するには、
kubectl apply -f <filename.yaml>を実行します次に、ポッドを管理するyamlファイルを更新し、ボリュームとボリュームのマウントを追加します。
有効にするには、ポッドを再作成します。
- APM Javaエージェント・ファイルをダウンロードします。
ファイルをダウンロードし、マウントされたボリュームにコピーします。
ダウンロード手順については、「APM Java Agentソフトウェアのダウンロード」を参照してください。
ダウンロード後、マウントされたボリュームにコピーします。
- APM Javaエージェントのプロビジョニング
いずれかのコンテナにログインしてAPM Javaエージェントをプロビジョニングし、APM-java-agent-installer jarファイルを見つけて、次を実行します:
java -jar ./apm-java-agent-installer-<version>.jar provision-agent -service-name=<Name of the Service> -destination=<Destination_Directory> -private-data-key=<Agent installation key generated during APM domain creation> -data-upload-endpoint=<dataUploadEndpoint URL generated during APM domain creation>プロビジョニング手順は、APM Javaエージェントのプロビジョニングを参照してください。
- APM Javaエージェントのデプロイ
yamlファイルのマイクロサービスにoracle-apm-agentの場所を指定して、APM Javaエージェントをデプロイします。
-javaagent引数とAPMエージェントのjarファイルの場所を各マイクロサービスのjavaコマンドに追加します。java -javaagent:<Mounted Volume>/oracle-apm-agent/bootstrap/ApmAgent.jar - Kubernetesを再起動します。
kubectl apply -f <filename.yaml>を実行して、ポッドを再作成します。次のステップ(APM Javaエージェント・デプロイメントの検証)に移動できるようになりました。
マウントされたボリュームにAPM Javaエージェントをデプロイする方法の詳細は、ビデオ(分散トレース用のKubernetes Spring Boot Instrumentation)を参照するか、ブログ(Application Performance Monitoring: Instrument Java on Kubernetes for Monitoring and Diagnostics)を確認してください。