この章ではエージェントのインストール方法について説明します。エージェントはWebアプリケーションサーバのプロセス、またはスタンドアロンのJAVAデーモンプロセスにインストールできます。
エージェント(JAVA)のディレクトリ構成
JENNIFERのパッケージファイルを解凍すると、agent.javaというディレクトリが作成されます。agent.javaディレクトリの構成は次の通りです。
ディレクトリ名 | 説明 |
---|---|
conf | エージェント構成ファイルが存在するディレクトリ |
upgrade | エージェントアップグレードファイルを保存するディレクトリ |
logs | エージェントログファイルを保存するディレクトリ |
libs | エージェントが必要とするライブラリが存在するディレクトリ |
ext | 各種ツールがあるディレクトリ |
service_dump | サービスダンプファイルを保存するディレクトリ |
エージェント(JAVA)のファイル構成
agent.javaディレクトリには3つのjarファイルがバージョン毎にあります。jennifer.jarファイルはインターフェースのみを含んでいますが、エージェントが開始するときは最新バージョンのjennifer.impl-x.x.x.jarファイルをロードします。各ファイルの説明は次の通りです。
ファイル名 | 説明 |
---|---|
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の場合、次のようにオプションを追加します。
オプション | 説明 |
---|---|
-Djennifer.config=/home/jennifer5/agent.java/conf/jennifer.conf | JENNIFERエージェントの設定ファイルのパスを環境変数に指定します。 |
-javaagent:/home/jennifer5/agent.java/jennifer.jar (jennifer.jdk8.jar) | JENNIFERエージェントのモジュールをjavaagetとして指定します。 |
オプション | 説明 |
---|---|
-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のバージョンを確認してください。
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)の必須オプション
エージェントを初期化するために設定すべき必須オプションは次の通りです。
オプション | 初期値 | 説明 |
---|---|---|
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以上のみサポートします。)
$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" )
APサーバプロセスを再起動します。
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秒待機状態にするオプションです。テスト環境のみ使用することを推奨します。
また、次の条件に当てはまる環境ではメモリ使用量が継続的に増加する可能性があるので、注意してください。
普段使用するヒープメモリ使用量が少ない。
起動オプションにヒープメモリ関連設定(-Xms, -Xmx)がない。
物理メモリのサイズが大きくて、デフォルトの最大ヒープメモリサイズが、通常使用するヒープメモリ使用量より非常に大きい。
Azure App Serviceにインストールする場合
Azureに対応できるJAVA Web App Serviceは次の2つに分類できます。
JAVA Web App Service for Windows
JAVA Web App Service for Linux
現在、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
拡張機能のインストール完了後、[設定]の[構成]画面で以下のアプリケーションの設定をします。
変数名 | 値 | 説明 |
---|---|---|
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ファルだにログが生成されます。
created.logが生成されて内容に「installed」と出力されているかを確認します。
次に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
[設定]の[構成]画面で以下のアプリケーションの設定をします。
変数名 | 値 | 説明 |
---|---|---|
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ファルだにログが生成されます。
created.logが生成されて内容に「installed」と出力されているかを確認します。
次に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モジュールが異なります。
エージェントをインストールしたディレクトリ配下のlibsディレクトリでモニタリング対象OSに該当するディレクトリからJNIモジュールをlibsディレクトリへコピーします。
「管理 > エージェント詳細オプション」画面で「enable_jmx_for_system_resource」をfalseに変更します。
エージェントを再起動します。
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ファイルをエージェントディレクトリにコピーします。