メインコンテンツまでスキップ

Java Agent インストール

1. モジュールの説明​

exem-java-agentは、Java VMベースのプロセスで実行されるWASのトランザクション、SQL、例外、リソース使用量を収集してExemONE収集サーバー(Receiver)に送信するモニタリングエージェントです。

2. サポート環境​

項目内容
RuntimeJDK 8 ~ 26
(JDK 8未満は別途お問い合わせください — サポート不可ではなく、エージェント修正後に配布可能です。JDK 26はv3.0.25.9+、それ以前はJDK 8~23)
PlatformOn-premise
Docker
Kubernetes
WASTmaxsoft JEUS
Apache Tomcat
IBM WebSphere
Red Hat JBoss
Oracle WebLogic
Undertow
Atlassian製品群
Liferay
FrameworkServlet (javax)
Servlet (jakarta)
Apache Camel
Spring WebFlux (reactive)
Vert.x
Kafka (consume)
(x.adviceのconsumeエントリはデフォルトでコメントアウトされており、環境に応じて選択的に有効化して使用します。エージェント内部にkafka consumeをトランザクションとして処理するロジックが存在します)
DBMongoDB driver v2.x/v3.x
Oracle
PostgreSQL
MySQL
MariaDB
MSSQL
DB2
Informix
Sybase
SAP HANA
Altibase
PPAS
CUBRID
Tibero
Apache Cassandra
ClickHouse
ProtocolTCP 9010 → Receiver
PrereqJVMベースのWASのいずれかが必要

3. 通信ポート​

送信元送信先プロトコルポート用途
モニタリング対象サーバー (WAS)ExemONE収集サーバー (Receiver)TCP9010エージェント-収集サーバー間通信
注記

モニタリング対象サーバーからExemONE収集サーバー方向に9010ポートが開放されている必要があります。

4. インストール方法​

環境に応じて3種類のインストール方式をサポートします。

インストール方式適合環境特徴
On-Premiseインストール物理サーバー、VMtar.gz解凍後にJVMオプションを設定
InitContainer方式Kubernetesアプリケーションの再ビルドなしにinitContainerとしてインストール
Dockerfile Rebuild方式Kubernetes、DockerDockerfileにエージェントを含めてイメージをビルド

4-1. On-Premiseインストール​

1. パッケージの解凍​

tar xvzf EXEM-JAVA-AGENT-[version].tar.gz

2. Receiver接続設定​

{インストールパス}/exem/java/cfg/agent/java.confファイルのRECEIVER_ADDRにExemONE収集サーバーのアドレスを入力します。

RECEIVER_ADDR=<収集サーバーIP>:9010

3. JVMオプションの設定​

WAS起動スクリプトに以下のJVMオプションを追加します。設定はWAS再起動後に適用されます。

Tomcat例($CATALINA_HOME/bin/catalina.shまたはsetenv.sh):

JAVA_OPTS="$JAVA_OPTS -Dexem.groupid=default -Dexem.agent.name=tomcat_agent -Dexem.bid=$(hostname) -javaagent:/home/exem/java/lib/exem-java-agent.jar"

JVMオプションの説明:

JVMオプション説明備考
-Dexem.groupidExemONEのSetting > Application > WAS Group名
-Dexem.agent.nameExemONE画面に表示されるWAS名
-Dexem.bidexem-host-agentと連携するためのキー。通常$(hostname)を使用リソース連携時に必要
-javaagentexem-java-agent.jarファイルの絶対パス必須

JDK 9以上で必須の追加オプション:

JDK 9からJavaのモジュール化によって、CPU/メモリ使用量の収集に以下のオプションを追加する必要があります。

--add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED

HTTP外部呼び出し収集オプション(任意):

Javaの基本パッケージによるHTTP外部呼び出しデータの収集が必要な場合、以下のオプションを追加します。

--add-opens=java.base/sun.net.www.http=ALL-UNNAMED
--add-opens=java.base/sun.net.www.protocol.http=ALL-UNNAMED
--add-exports=java.base/sun.net.www=ALL-UNNAMED

JDK 9以上の全体例:

JAVA_OPTS="$JAVA_OPTS -Dexem.groupid=default -Dexem.agent.name=tomcat_agent -Dexem.bid=$(hostname) -javaagent:/home/exem/java/lib/exem-java-agent.jar --add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED"

4-2. InitContainer方式 (Kubernetes)​

アプリケーションを再ビルドせずに、PodのinitContainerとしてエージェントをインストールする方法です。

事前条件:

  • kubectlコマンドを実行できる環境が必要です。
  • インストール対象のDeployment YAMLにExemONEの環境変数を追加する必要があります。

インストールパッケージの構成:

ファイル用途
exem-java-agent-inst_x.x.x.x.tgzinitContainer用Dockerイメージ
configmap.yml環境変数・設定ファイルのConfigMap定義

1. ConfigMapの作成​

以下の2つのConfigMapを作成します。

exem-java-agent-env (JVMオプション環境変数):

apiVersion: v1
kind: ConfigMap
metadata:
name: exem-java-agent-env
namespace: {{namespace指定}}
data:
startup_opt: "-javaagent:/exem/java/lib/exem-java-agent.jar -Dexem.run.on.container=true"

exem-java-agent-config (エージェント設定ファイル):

apiVersion: v1
kind: ConfigMap
metadata:
name: exem-java-agent-config
namespace: {{namespace指定}}
data:
java.conf: |
RECEIVER_ADDR={{収集サーバーアドレス指定}}
db.alias: |
# ip.port.databasename=alias
local.advice: |
!javax/servlet/http/HttpServlet.*

2. Deployment YAMLの修正​

既存のDeployment YAMLのspec.template.specに以下の内容を追加します。

spec:
template:
spec:
volumes:
- name: exem-volume
emptyDir: {}
- name: config-volume-java-agent
configMap:
name: exem-java-agent-config
initContainers:
- name: install-exem-java-agent
image: exem-java-agent-inst:x.x.x
imagePullPolicy: IfNotPresent
volumeMounts:
- name: exem-volume
mountPath: /exem
- name: config-volume-java-agent
mountPath: "/exem-config"
readOnly: true
containers:
- name: <application-name>
volumeMounts:
- name: exem-volume
mountPath: /exem
env:
- name: EXEM_GROUP_ID
value: "{{group id指定}}"
- name: EXEM_RUN_ON_CONTAINER
value: "true"
- name: EXEMWID
valueFrom:
fieldRef:
fieldPath: metadata.uid
- name: EXEM_JAVA_AGENT_NAME
value: "{{agent name指定}}"

環境変数の説明:

環境変数説明備考
EXEM_GROUP_IDWASグループID未設定時はdefault
EXEM_RUN_ON_CONTAINERコンテナ環境での動作有無コンテナ: true、On-Premise: false(デフォルト)
EXEMWIDコンテナ連携用のキーEXEM_RUN_ON_CONTAINER=true設定時のみ適用
EXEM_JAVA_AGENT_NAMEWAS名v3.0.24.16から環境変数でサポート
EXEM_RECEIVER_ADDR収集サーバーアドレス(IP:ポート)v3.0.24.16から環境変数でサポート

設定値の優先順位:

JVMオプション、環境変数、設定ファイルの3つの方式で指定でき、以下の順序で優先されます。

設定項目優先順位(高い → 低い)
GROUP_ID-Dexem.groupid= > EXEM_GROUP_ID > 設定ファイル
RUN_ON_CONTAINER-Dexem.run.on.container= > EXEM_RUN_ON_CONTAINER > 設定ファイル
AGENT_NAME-Dexem.agent.name= > EXEM_JAVA_AGENT_NAME > 設定ファイル(EXEM_AGENT_NAME)
RECEIVER_ADDR-Dexem.receiver.addr= > EXEM_RECEIVER_ADDR > 設定ファイル(RECEIVER_ADDR)

3. Tomcat使用時(任意)​

提供されたexem-java-agent-env ConfigMapを使用して、CATALINA_OPTSにエージェントオプションを適用します。

4-3. Dockerfile Rebuild方式​

インストール対象アプリケーションのDockerfileにエージェントを含めてイメージをビルドする方式です。

1. パッケージのアップロードと解凍​

イメージを再ビルドするサーバーにパッケージをアップロードした後、解凍します。

tar -xvzf EXEM-JAVA-AGENT-3.x.x.tar.gz
rm -f EXEM-JAVA-AGENT-3.x.x.tar.gz

2. Dockerfileにエージェント設定を追加​

COPY {パッケージパス}/exem {アプリケーション内パス}/exem
ENV EXEM_GROUP_ID={group_id}
ENV EXEM_RECEIVER_ADDR={IP:PORT}
ENV JAVA_OPTS={JAVA_OPTS}

例:

COPY /home/exemone/exem /home/exem
ENV EXEM_GROUP_ID=default
ENV EXEM_RECEIVER_ADDR=<収集サーバーIP>:9010
ENV JAVA_OPTS="$JAVA_OPTS -Dexem.groupid=$EXEM_GROUP_ID -Dexem.agent.name=tomcat_agent -javaagent:/exem/java/lib/exem-java-agent.jar -Dexem.run.on.container=true"

3. Dockerイメージのビルド​

docker build --tag {docker-user-id}/{repository-name} .

4. Deploymentの適用​

Deployment YAMLにExemONEの環境変数を追加した後、デプロイします。

kubectl apply -f app-deployment.yaml

5. インストール確認​

5-1. Agentログの確認​

エージェントログで正常起動を確認します。

tail -f {インストールパス}/exem/java/logs/exem-java-agent[バージョン].log

正常起動時は以下のようなログが出力されます。

[INFO ] [main] LOAD [com.exemone.ext.XM_BOUND_X]
[INFO ] [main] LOAD [com.exemone.ext.XM_RT]
[INFO ] [main] EXEM AGENT EXT [...]
[INFO ] [main] 3.0.23

5-2. ExemONE画面の確認​

Application > WAS画面で、該当WASがActive状態になっているかを確認します。

注記

WASがActive状態にならない場合は、収集サーバー ↔ WASサーバー間のネットワークおよび9010ポートのファイアウォール設定を確認してください。