エージェント(JAVA)のインストール及び構成

この章ではエージェントのインストール方法について説明します。エージェントはWebアプリケーションサーバのプロセス、またはスタンドアロンのJAVAデーモンプロセスにインストールできます。

エージェント(JAVA)のディレクトリ構成

JENNIFERのパッケージファイルを解凍すると、agent.javaというディレクトリが作成されます。agent.javaディレクトリの構成は次の通りです。

agent.javaディレクトリ説明

ディレクトリ名

説明

conf

エージェント構成ファイルが存在するディレクトリ

upgrade

エージェントアップグレードファイルを保存するディレクトリ

logs

エージェントログファイルを保存するディレクトリ

libs

エージェントが必要とするライブラリが存在するディレクトリ

ext

各種ツールがあるディレクトリ

service_dump

サービスダンプファイルを保存するディレクトリ

エージェント(JAVA)のファイル構成

agent.javaディレクトリには3つのjarファイルがバージョン毎にあります。jennifer.jarファイルはインターフェースのみを含んでいますが、エージェントが開始するときは最新バージョンのjennifer.impl-x.x.x.jarファイルをロードします。各ファイルの説明は次の通りです。

エージェント(JAVA)ファイルの説明

ファイル名

説明

jennifer.jar

エージェントの共通インターフェースを含んでいます

conf/jennifer.conf

エージェントの初期設定ファイル

jennifer.impl-x.x.x.jar

BCIコードとエージェントをトレースできるコードを含んでいます(5.6.3.xまで)

jennifer.impl.jdk16-x.x.x.jar

JEUSのJMX情報収集用クラスを含んでいます(5.6.3.xまで)

同一サーバ上に複数の監視対象のインスタンスがある場合、設定ファイルをコピーして使用します。

javaエージェント5.6.4からは、既存分離されていたjarファイル(jennifer.jdk8.jarやjennifer.impl-x.x.x.jarやjennifer.impl.jdk16-x.x.x.jar)をjennifer.jarファイル1つに統合しました。

エージェント(JAVA)の構成と設定

エージェントのインストールでは、監視対象のJAVA起動オプションの設定を変更します。

エージェント(JAVA)のJAVAオプション

監視対象としてエージェントを設定するためには、以下の2つのオプションを追加します。

エージェントのホームが/home/jennifer5/agent.javaの場合、次のようにオプションを追加します。

エージェントJAVA5.6.3.xまでの構成オプション

オプション

説明

-Djennifer.config=/home/jennifer5/agent.java/conf/jennifer.conf

JENNIFERエージェントの設定ファイルのパスを環境変数に指定します。

-javaagent:/home/jennifer5/agent.java/jennifer.jar (jennifer.jdk8.jar)

JENNIFERエージェントのモジュールをjavaagetとして指定します。

エージェントJAVA5.6.4からの構成オプション

オプション

説明

-Djennifer.config=/home/jennifer5/agent.java/conf/jennifer.conf

JENNIFERエージェントの設定ファイルのパスを環境変数に指定します。

-javaagent:/home/jennifer5/agent.java/jennifer.jar

JENNIFERエージェントのモジュールをjavaagetとして指定します。

JENNIFERエージェントはJAVA1.5以上に対応しています。JENNIFERバージョンによって対応するJAVAのバージョンが異なります。次の表を参照してインストールするJENNIFERのバージョンを確認してください。

サポートするJAVAバージョン

JENNIFERバージョン

サポートするJAVAバージョン

〜 5.3.x

JAVA 1.5 ~ 8

5.4.0 〜 5.5.x

JAVA 6 〜 13

5.6.0 〜 5.6.0.x

JAVA 6 〜 17

5.6.1 〜 5.6.1.x

JAVA 7 〜 17

5.6.2 〜 5.6.2.x

JAVA 8 〜 20

5.6.3 〜 5.6.3.x

JAVA 8 〜 21

5.6.4

JAVA 8 〜 22

jennifer.jdk8.jarはJAVA 1.8以上のバージョンをサポートします。非同期トランザクション(Spring Webflux、Spring Reactor)やバッチ(Spring Batch)をモニタリングする場合に使用します。


jennifer.jdk8.jarファイルは画面からアップグレードができないので、非同期トランザクションやバッチをモニタリングしない場合は、既存のjennifer.jarを使用することを推奨します。


javaエージェント5.6.4からは、jennifer.jdk8.jarはjennifer.jarファイルに統合されました。

5.6.2からは非同期処理をモニタリングするためのOpenTelemetryエージェントを提供します。

5.6.2以降で、非同期環境をモニタリングする際にはOpenTelemetryエージェントもインストールしてください。

エージェント(JAVA)の必須オプション

エージェントを初期化するために設定すべき必須オプションは次の通りです。

設定が必要なエージェント(JAVA)の必須オプション

オプション

初期値

説明

server_address

127.0.0.1

データサーバのIPアドレス

server_port

5000

データサーバのサービスポート番号

domain_id

1000

ドメインID

log_dir

../logs

ログファイルの保存先のパス

log_encoding

UTF-8

ログファイルのエンコード

log_rotation

true

ログファイルのローテーションの設定で、Trueを設定すると、毎日新規にログファイルが作成されます。

log_max_age

0

ログファイルの保存期間で、保存する日数(例えば、30の場合30日間)を設定します。0の場合は永久保存です。

ドメインIDの値は1から32767までの整数です。この値はデータサーバとビューサーバの両方が参照するため、複数のデータサーバを運用する場合は各ドメインIDに対して別の値を指定する必要があります。

ドメイン当たりの最大監視可能インスタンス数は100です。100個のインスタンスが登録されると、新規エージェントの追加は拒否されます。この場合は新しいdomain_idを指定して登録しなければなりません。

ドメインIDはデータサーバ上でも、ビューサーバ上でも重複しないように設定しなければなりません。すなわち、JENNIFERのモニタリング環境全体でユニークな値を使用しなければなりません。

inst_id(インスタンスID)の手動設定

初期インストールの時点でinst_idを指定しなかった場合、inst_idはデータサーバから自動的に割り当てられます。この場合、inst_idは10000からの使用可能なIDが昇順で付与されます。

手動でinst_idを指定する場合、構成ファイル(jennifer.conf)のinst_idを指定します。

inst_id = 999

inst_idの値は1から32767までの整数です。

同一マシン上で動作する複数のインスタンスをモニタリングする場合、各々のインスタンスに対して固有のインスタンスIDを指定する必要があります。

エージェント(JAVA)のインストール

起動オプションの追加

インストールするには次の2つのオプションをモニタリング対象のJAVA起動オプションに追加します。

エージェントのホームが/home/jennifer5/agent.javaの場合、次のようにオプションを追加します。

-Djennifer.config=/home/jennifer5/agent.java/conf/jennifer.conf
-javaagent:/home/jennifer5/agent.java/jennifer.jar

・ JENNIERの管理画面からバージョンアップする際に、JENNIFERエージェントモジュール(jennifer.jar)を手動の更新が必要な場合があります。


・ 5.6.1.x以下のバージョンから5.6.2以上のバージョンにアップグレードする場合は、次のjarファイルを削除する必要があります。

jennifer.jdk6-5.x.x.x.jar

jennifer.jdk9-5.x.x.x.jar

オプションを適用するためにはインストール後、再起動が必要です。

OpenTelemetryエージェントの使用

JENNIFER5.6.2からは非同期処理をより正確にモニタリングするため、OpenTelemetryエージェントを提供します。

OpenTelemetryエージェントのインストール方法

OpenTelemetryエージェント(/agent.java/ext/opentelemetry-javaagent.jar)は既存JENNIFERエージェント(/agent.java/jennifer.jar)と同じく-javaagent起動オプションに設定します。

-javaagent:/home/jennifer5/agent.java/jennifer.jar
-javaagent:/home/jennifer/agent.java/ext/opentelemetry-javaagent.jar

OpenTelemetryエージェントは、既存のJENNIFERエージェントと一緒に設定して使用します。

また、必ずjennifer.jarをopentelemetry-javaagent.jarより先に設定しなければなりません。

次に、JENNIFERデータサーバの起動オプションにOpenTelemetryが収集したデータを受信するポート番号を指定します。(/server.data/bin/jennifer_data.sh)

JAVA_OPTS=" ${JAVA_OPTS} -Djennifer.unofficial.opentelemetry.collect.port=4317"

最後に、OpenTelemetryエージェントを使用するには、エージェント設定ファイル(jennifer.conf)に次の設定を追加します。

enable_opentelemetry = true
server_grpc_port = 4317

JENNIFERエージェントのオプション(server_grpc_port)とJENNIFERデータサーバの起動オプション(jennifer.unofficial.opentelemetry.collect.port)には同じポート番号を設定します。

OpenTelemetryエージェント使用次の注意事項

OpenTelemetryは、トレース、 メトリック、 ログなどの テレメトリ データを 作成および管理するために設計されたオープンソースのフレームワークです。そのため、長年性能を改善してきたJENNIFERエージェントと比べるとまだデータの処理(収集・保存)に最適化されてありません。

特に、OpenTelemetryエージェントを使用するとJENNIFERエージェントよりトランザクションの数が増えますし、プロファイルデータの保存もテキストタイプのまま保存するためデータサーバのディスク使用量がJENNIFERに比べて非常に大きくなる場合があります。

本番環境へ導入する場合は、十分なテストを行った上に導入することを推奨します。

アプリケーションサーバ別の注意事項

ほとんどの場合、上記の2つのオプションを追加するだけでインストール作業は終わりますが、一部のアプリケーションサーバの場合は追加の設定が必要です。この節では追加の設定が必要なアプリケーションサーバとその方法について説明します。

JBossにインストールする場合

JBoss-EAP 6(Communityバージョン7)以降の場合、設定ファイルのjboss.modules.system.pkgsオプションに追加の設定が必要です。

-Djboss.modules.system.pkgs=org.jboss.byteman,aries,java.sql,javax.sql

GlassFishにインストールする場合

次のようにasadminツールを使用して、JVMオプションを追加できます。

# Linux
glassfish4/bin/asadmin create-jvm-options "-javaagent\:<jennifer_agent_home>/jennifer.jar"
# Windows
glassfish4\bin> asadmin.bat create-jvm-options '-javaagent:<Drive_letter>:<agent_home>\jennifer.jar'

$GLASSFISH_HOME/configディレクトリにあるosgi.propertiesファイルをオープンして、以下の内容をorg.osgi.framework.bootdelegationオプションに追加します。

org.osgi.framework.bootdelegation=${eclipselink.bootdelegation}, \
                              com.sun.btrace, com.sun.btrace.*, \
                              aries, aries.*, \
                              org.netbeans.lib.profiler, org.netbeans.lib.profiler.*

Jettyにインストールする場合

Jettyの基本JAVAオプション設定ファイルは jetty.shです。

Jetty バージョン6 以上をサポートします。 ( JDK 1.5以上のみサポートします。)

  1. $JETTY_HOME/binディレクトリのjetty.shファイルで以下のオプションを追加します。

-Djennifer.config=/home/jennifer5/agent.java/conf/jennifer.conf
-javaagent:/home/jennifer5/agent.java/jennifer.jar
#####################################################

# Add jetty properties to Java VM options.
#####################################################
JAVA_OPTIONS+=("-Djetty.home=$JETTY_HOME" "-Djava.io.tmpdir=$TMPDIR" "-Djennifer.config=/home/j5/jennifer5/agent.java/conf/jennifer.conf" "-javaagent:/home/j5/jennifer5/agent.java/jennifer.jar" )
  1. APサーバプロセスを再起動します。

  1. JENNIFERエージェントが正常に動作すると、エージェントログファイルに以下の内容が表示されます。

2020-09-01/16:35:05 [I023] Agent own advanced option is found : domain_id = [1000]
2020-09-01/16:35:05 [I023] Agent own advanced option is found : inst_id = [10000]
2020-09-01/16:35:05 [I023] Agent own advanced option is found : log_encoding = [UTF-8]
2020-09-01/16:35:05 [I023] Agent own advanced option is found : log_rotation = [true]
2020-09-01/16:35:05 [I023] Agent own advanced option is found : log_level = [1]
2020-09-01/16:35:05 [I023] Agent own advanced option is found : server_address = [192.168.0.31]
2020-09-01/16:35:05 [I023] Agent own advanced option is found : server_port = [5000]
2020-09-01/16:35:05 [I001] Agent initialized
2020-09-01/16:35:05 [I001] loading control module : /Users/nomin/jennifer5/agent/agent.java/jennifer.impl-5.5.2.2.jar
2020-09-01/16:35:05 [I001] Agent Enable : true
2020-09-01/16:35:05 [I001] Agent Base Version 5.5.2
2020-09-01/16:35:05 [I001] Agent Implementation Version 5.5.2.2
...
2020-09-01/16:35:09 [I001] Runtime Module initialized

バッチにインストールする場合

独立実行型のバッチにインストールする場合、トランザクションをモニタリングするためエージェント設定ファイルに次の設定が必要です。

application_start_point = packageName.ClassName methodName
または
profile_service_class = packageName.ClassName methodName

バッチ処理が早すぎて、データサーバとセッションが結ばれる前に終わってモニタリングができない場合はエージェント設定ファイルに次のオプションを設定するとモニタリング可能です。

send_transaction_in_application_thread = true

send_transaction_in_application_threadオプションはデータサーバとセッションを結ぶまで最大5秒待機状態にするオプションです。テスト環境のみ使用することを推奨します。

また、次の条件に当てはまる環境ではメモリ使用量が継続的に増加する可能性があるので、注意してください。

Azure App Serviceにインストールする場合

Azureに対応できるJAVA Web App Serviceは次の2つに分類できます。

現在、Tomcatのみサポートします。JavaSE(Embedded Web Server)とJBoss EAP 7はサポートしません。

スケールアウト機能利用時の設定について


スケールアウト機能を利用する場合は、JENNIFERサーバコンソールの「設定>モニタリング対象>ドメイン」画面で、App Serviceをモニタリングするドメインの「インスタンスIDが重複時、新規IDの自動生成」項目にチェックを入れます。

また、スケールイン/アウトが頻繁に行われる環境でインスタンスIDが増加し過ぎが予想される場合は、モニタリングするドメインの「使用してないインスタンスIDの再利用」項目にチェックを入れます。

JAVA Web App Service for Windows

1

次のように[拡張機能(Extensions)]設定画面で[+追加]ボタンをクリックし、 拡張リストの[JENNIFER Java Agent]を選択してインストールします。

Azure 拡張機能メニュー

JENNIFERエージェントの選択

2

拡張機能のインストール完了後、[設定]の[構成]画面で以下のアプリケーションの設定をします。

Windowsホスティング環境のAzure Web App用のアプリケーションの設定

変数名

説明

ARIES_SERVER_ADDRESS

[JENNIFERデータサーバの接続IPアドレス]

例: 192.168.0.100

ARIES_SERVER_PORT

[JENNIFERデータサーバの接続ポート]

例: 5000

ARIES_DOMAIN_ID

[JENNIFERデータサーバのドメインID]

例: 1000

CATALINA_OPTSまたはJAVA_OPTS

-Djennifer.config=%home%\SiteExtensions\JenniferJavaAgentExtension\agent.java\conf\azure.conf -javaagent:%home%\SiteExtensions\JenniferJavaAgentExtension\agent.java\jennifer.jar

既に同じ環境変数が定義されている場合は、既存の設定に追記します。

アプリケーションの設定の追加

追加されたアプリケーションの設定

3

Windows用JNIライブラリをコピーします。

[開発ツール]の[コンソール]を利用してWindows用JNIライブラリ(例、sys-0.2.1-windows-64.dll)を「%home%\SiteExtensions\JenniferJavaAgentExtension\agent.java\libs」ディレクトリへコピーします。

JNIライブラリのコピー

4

設定後、App Servicesを再起動すると設定内容が反映されます。

App Serviceの再起動

5

ログを確認して正常に起動できたかを確認します。

正常にインストールができましたら、%home%\SiteExtensions\JenniferJavaAgentExtension\agent.java\logsファルだにログが生成されます。

  1. created.logが生成されて内容に「installed」と出力されているかを確認します。

  2. 次にagent_<yyyyMmdd>_<domain_id>_<inst_id>.logとagent_instrument_<yyyyMMdd>.logファイルの生成を確認します。エージェントログを開いて「Control module loading complete.」と「Runtime module loading complete...」メッセージが出力されているか確認します。

JAVA Web App Service for Linux

1

次のようにSSHメニューを利用しApp Serviceへ接続します。

Azure PortalでのWeb App ServiceのSSHメニュー

2

/home/site/wwwroot/apmディレクトリを作成し、Java Agent ZIPファイルをダウンロードします。

~:/home# cd site/wwwroot/
~:/home/site/wwwroot# mkdir apm
~:/home/site/wwwroot# cd apm
~:/home/site/wwwroot/apm# wget https://.../jennifer-agent-java-5.6.0.1.zip

ダウンロードのURLは、別途のお知らせメールを参照してください。

3

ダウンロードしたzipファイルを解凍します。

~:/home/site/wwwroot/apm# unzip jennifer-agent-java-5.6.0.1.zip
Archive:  jennifer-agent-java-5.6.0.1.zip
   creating: agent.java/
   creating: agent.java/conf/
   creating: agent.java/ext/
   creating: agent.java/libs/
   creating: agent.java/libs/aix-7.1/
   ...
  inflating: agent.java/libs/windows/sys-0.2.0-windows-64.dll
  inflating: agent.java/libs/windows/sys-0.2.1-windows-32.dll
  inflating: agent.java/libs/windows/sys-0.2.1-windows-64.dll
~:/home/site/wwwroot/apm#

4

[設定]の[構成]画面で以下のアプリケーションの設定をします。

Linuxホスティング環境のAzure Web App用のアプリケーションの設定

変数名

説明

ARIES_SERVER_ADDRESS

JENNIFERデータサーバの接続IPアドレス

例: 192.168.0.100

ARIES_SERVER_PORT

JENNIFERデータサーバの接続ポート

例: 5000

ARIES_DOMAIN_ID

JENNIFERデータサーバのドメインID

例: 1000

CATALINA_OPTSまたはJAVA_OPTS

-Djennifer.config=/home/site/wwwroot/apm/agent.java/conf/azure.conf -javaagent:/home/site/wwwroot/apm/agent.java/jennifer.jar

既に同じ環境変数が定義されている場合は、既存の設定に追記します。

アプリケーション設定の追加

追加されたアプリケーションの設定

5

設定後、App Servicesを再起動すると設定内容が反映されます。

App Serviceの再起動

6

ログを確認して正常に起動できたかを確認します。

正常にインストールができましたら、/home/site/wwwroot/apm/agent.java/logsファルだにログが生成されます。

  1. created.logが生成されて内容に「installed」と出力されているかを確認します。

  2. 次にagent_<yyyyMmdd>_<domain_id>_<inst_id>.logとagent_instrument_<yyyyMMdd>.logファイルの生成を確認します。エージェントログを開いて「Control module loading complete.」と「Runtime module loading complete...」メッセージが出力されているか確認します。

コンテナ(Docker)にインストールする場合

本節の内容はDocker環境で動作するTomcatにインストールすることを前提に説明します。

インストールの流れ

1

モニタリング対象コンテナのDockerfileがある作業ディレクトリにJENNIFERエージェントのパッケージを用意します。

└── workspace
    ├── Dockerfile
    └── jennifer-agent-java-x.x.x.x.zip

2

使用するエージェント設定ファイルの内容を次のように作成します。

server_address = <DATA_SERVER_IP_ADDRESS>
server_port = <DATA_SERVER_LISTENING_PORT>

# default log_dir "{agent_home}/logs"
# log_dir = {agent_home}/logs
# log_file =
# log_level : 1(info), 2(debug), 3(trace)
log_level = 1
log_encoding = UTF-8
log_rotation = true
# log_max_age : Working when log_rotation is activated. Valid ragne is (1-365)
# log_max_age = 0

# domain_id : Valid range is (1-32767)
domain_id = <DOMAIN_ID>

server_address、server_port、domain_idに適切な値を設定します。

3

作成したエージェント設定ファイルを作業ディレクトリへコピーします。

└── workspace
    ├── Dockerfile
    ├── jennifer-agent-java-x.x.x.x.zip
    └── jennifer.conf

4

JENNIFERオプションを適用した起動ファイルを次のように作成します。

# JENNIFER Java Agent
AGENT_HOME=/opt/agent.java
export CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_HOME/jennifer.jar -Djennifer.config=$AGENT_HOME/conf/jennifer.conf"

既にsetenv.shファイルを作成して使用している場合は、そのファイルに内容を追記します。

Tomcat以外のAPサーバへインストールする場合は、対象APサーバの起動オプション設定ファイルを修正します。

5

作成したsetenv.shファイルを作業ディレクトリにコピーします。

└── workspace
    ├── Dockerfile
    ├── jennifer-agent-java-x.x.x.x.zip
    ├── jennifer.conf
    └── setenv.sh

6

次のようにDockerfileを編集して、JENNIFERエージェントをインストールします。

FROM alpine AS builder

ENV AGENT_VERSION=5.6.0.9
RUN apk --no-cache add unzip
COPY jennifer-agent-java-${AGENT_VERSION}.zip /
RUN unzip -oq jennifer-agent-java-${AGENT_VERSION}.zip -d /tmp


FROM tomcat:8.5-jre8-alpine

...

COPY --from=builder /tmp/agent.java /opt/agent.java
COPY jennifer.conf /opt/agent.java/conf/jennifer.conf
COPY setenv.sh ${CATALINA_HOME}/bin

コマンド

説明

FROM alpine AS builder

JENNIFERパッケージを解凍するためのLinuxイメージ

ENV AGENT_VERSION=5.6.0.9

インストールするJENNIFERエージェントのバージョン

COPY jennifer-agent-java-${AGENT_VERSION}.zip /

手順①で用意したJENNIFERエージェントのパッケージをコピー

RUN unzip -oq jennifer-agent-java-${AGENT_VERSION}.zip -d /tmp

コピーしたパッケージを解凍

COPY --from=builder /tmp/agent.java /opt/agent.java

解凍したJENNIFERエージェントのパッケージをコピー

COPY jennifer.conf /opt/agent.java/conf/jennifer.conf

手順②で作成したjennifer.confをコピー

COPY setenv.sh ${CATALINA_HOME}/bin

手順④で作成したsetenv.shファイルを${CATALINA_HOME}へコピー

7

Dockerfileの構成が終了後に、次のようにコンテナをビルドして構成した内容を反映します。

docker build -t jennifer-java .

サンプル


Dockerへインストールするサンプルは次のURLから入手可能です。

https://github.com/JENNIFER-University/javaagent-docker-example

システムリソース(CPU、メモリ)使用量を収集するためのJNIモジュール登録

JNIモジュールを利用してCPU、メモリデータを収集する方法は次の通りです。モニタリング対象OSによって、使用するJNIモジュールが異なります。

  1. エージェントをインストールしたディレクトリ配下のlibsディレクトリでモニタリング対象OSに該当するディレクトリからJNIモジュールをlibsディレクトリへコピーします。

  2. 「管理 > エージェント詳細オプション」画面で「enable_jmx_for_system_resource」をfalseに変更します。

  3. エージェントを再起動します。

  4. JNIモジュールの正常ロードをログで確認します。

2016-05-19/15:35:29 native lib libjennifer5-0.1.0-aix7.1_32.so loaded

エージェント(JAVA)の削除

エージェントを削除するにはJAVA起動オプションに追加した2つのオプションを削除し、対象プロセスを再起動します。

エージェント(JAVA)のアップグレード

エージェントのアップグレードは[管理 > エージェントアップグレード]画面で行います。

管理画面でアップグレード後、エージェントの再起動が必要です。

バージョン5.6.4基準では、アップグレードには必ずjennifer.jarファイルの更新があります。

jennifer.jarファイルを更新したアップグレードの場合、jennifer.jarファイルを手動でコピーしなければなりません。


例)5.6.4.1

この場合、[agent.java/upgrade/jennier-agent-java-5.6.4.1/agent.java]ディレクトリにコピー対象ファイル(jennifer.jar)が存在します。このディレクトリのjennifer.jarファイルをエージェントディレクトリにコピーします。