AppDynamicsを使用してJavaアプリケーションのモニタリングを開始するには、AppDynamics JavaエージェントをアプリケーションJVMにインストールします。

  1. Javaアプリケーションを実行するマシンにエージェントディストリビューションをダウンロードする。
  2. Java エージェントの設定を構成します。このページの以下の構成セクションでは、手動での構成について説明します。その他のオプションについては、「Javaエージェントの管理」を参照してください。
  3. JVM プロセスにエージェントを追加します。

Javaエージェントのインストール準備

AppDynamics Javaエージェントをデプロイする場所と方法を決定する際は、次の点を考慮してください。

  • JVM を実行するユーザには、Java エージェントホームの conf および logs ディレクトリへの書き込み権限が必要です(conf(<JAVA_AGENT_HOME>/ver<VERSION>/)への権限)。この条件を満たすために、JVM 所有者と同じユーザとして、またはホストマシンの管理者としてエージェントをインストールすることができます。エージェントディレクトリのその他のコンテンツは読み取り専用アクセスに制限できます。 
  • Java エージェントとコントローラ間の通信をセキュリティで保護する場合は、「Javaエージェント用SSLの有効化」を参照してください。
  • エージェントがローカルプロキシを介してコントローラに接続する場合、エージェント用のプロキシ設定を構成する必要があります。「Javaエージェント構成プロパティ」の「コントローラ用プロキシプロパティ」を参照してください。
  • Javaエージェントは、同じマシンで実行されている複数のJVM間での単一エージェントの共有をサポートします。この展開シナリオでは、システムプロパティと、バージョン管理された構成ファイルの組み合わせで設定を指定する必要があります。構成の例については、「単一マシン上で複数の JVM をインストゥルメント化する」を参照してください。 

cURL のインストールについては、「AppDynamicsソフトウェアのダウンロード」を参照してください。

AppDynamics Javaエージェントはバイトコードインジェクション(BCI)エージェントの一種です。他の BCI エージェントとの競合による予期しない問題を避けるために、AppDynamics では、JVM 上の唯一の BCI エージェントとして Java エージェントを実行する環境のみをサポートします。

各自の責任に基づき、JVM で複数の BCI エージェントを実行できます。Java エージェント 4.5.16 以前では、次のコマンドラインオプションを指定することで、他のエージェントと競合する可能性を減らすことができます。

-Dappdynamics.agent.prefer.retransformClasses=true

Java エージェント 4.5.17 以降では、他のエージェントの存在を検出すると、このオプションが自動的に有効になります。

カスタム Java ランタイムイメージのインストゥルメント化

Java エージェントを使用して、jlink を使用して構築されたカスタム Java ランタイムイメージで実行されているアプリケーションをインストゥルメント化できます。エージェントをインストゥルメント化するには、カスタムランタイムに次のモジュールが必要です。

  • jdk.management
  • java.logging

  • jdk.unsupported

jdk.jcmd は、カスタムランタイムに必要なモジュールではありません。ただし、オブジェクトインスタンス追跡を適切に機能させるには、これが必要です。「Javaのオブジェクトインスタンスの追跡」を参照してください。

AppDynamics では、Java.se のすべてのパッケージがインストールされていることが前提となっています。

Javaエージェントのリソースオーバーヘッド

Javaエージェントは通常、CPU使用率を0%~2%上昇させます。

ただし、特定の要因により、エージェントのCPUオーバーヘッドが2%を超えて上昇することがあります。例えば、非同期トランザクション追跡など、リソースを多く消費するAppDynamics機能を使用した場合などです。レポートされる1分あたりのメトリックまたはスナップショット数が多くなる非常にアクティブな環境または構成設定も、エージェントのリソース消費に影響を及ぼすことがあります。

AppDynamicsではどのような場合でも、ステージング環境でエージェントをテストし、適正な運用パラメータの範囲を出ないようにアプリケーションのリソース消費をモニタリングすることをお勧めしています。

ご使用のアプリケーションが既存のメモリリソース割り当てのわずかなマージン内で稼働している場合、アプリケーションの割り当てを増やすことを選べます。AppDynamicsは、エージェントに対応するため、以下のヒープ領域とPermGen領域を割り当てることを推奨します。

  • 最大ヒープサイズ(-Xmx):アプリケーションが要求する量に加えて 100 MB
  • 最大 PermGen(permanent generation)ヒープサイズ(-XX:MaxPermSize):アプリケーションが要求する量に 20 MB を追加MaxPermSize の設定は、Java 6 または Java 7 にのみ適用されます。
  • ネットワーク帯域幅の消費については、「アプリケーション サーバ エージェントのインストール」を参照してください。  

Javaエージェントディストリビューションのダウンロードと解凍

エージェント ダウンロード ウィザードからエージェントを取得できます。エージェントのインストールが初めての場合は、ウィザードから始めるとよいでしょう。ウィザードにより、ダウンロードするエージェントの構成ファイルがコントローラの接続設定に追加され、エージェントの設定が特定されます。エージェントをダウンロードしたら、そのエージェントを JVM にインストールできます。 

その他の方法として、下記の方法でエージェントを手動でダウンロードすることもできます。

  1. AppDynamics ダウンロードセンターから Java エージェント ZIP ファイルをダウンロード。
  2. JVMの同一ユーザーまたは管理者として、ZIPファイルを宛先ディレクトリに抽出。次のことに注意。
    • Java エージェントは、コンテナ外のディレクトリまたはアプリケーションサーバのランタイムディレクトリ(たとえば \usr\local\appdynamics\appagent)に抽出。
    • JVM を実行する際、ユーザがすべてのファイルを読み取れる必要がある。ユーザは Java エージェントホームの conflogs ディレクトリに対して書き込みの権限を持っている必要がある。そのためには、JVM を所有する同一ユーザまたはホストマシンの管理者としてエージェントをインストールする。  
    • 同様に、アプリケーションサーバーのランタイムディレクトリもJavaエージェントによる書き込みができる必要がある。

Java エージェントのホームディレクトリのコンテンツに関する情報は、「Javaエージェントディレクトリ構造」を参照してください。

Javaエージェントの構成

コントローラのエージェント ダウンロード ウィザードからエージェントをダウンロードした場合、エージェントがすでに構成されているので次のセクションに移ることができます。

手動で設定を構成するには(またはウィザード設定を確認するには)

  1. バージョン管理された構成ファイルの編集。
    <agent_home>/<version_number>/conf/controller-info.xml
    controller-info.xml は構成設定を提供するために利用可能なアプローチの 1 つ。他については、「Javaエージェント構成プロパティ」を参照。      
  2. コントローラへの接続設定の修正: 
    • controller-host:コントローラの IP アドレスまたはホスト名に設定。エージェントがプロキシを通して接続する必要がある場合は、「Javaエージェント構成プロパティ」の「コントローラ用プロキシプロパティ」を参照。
    • controller-port:コントローラのプライマリリスニングポート番号に設定。デフォルト:
      • SaaSコントローラの場合、HTTPに80またはHTTPSに443を使用

      • オンプレミスコントローラの場合、HTTPに8090またはHTTPSに8181を使用

  3. controller-ssl-enabled の値を true に設定することで、SSL(HTTPS)でコントローラに接続するようエージェントに指示。「Javaエージェント用SSLの有効化」を参照してください。
  4. 次の設定を使用して、AppDynamicsアプリケーションモデルにおいて監視されるJVMが属するビジネスアプリケーション、ティア、ノードを識別。
    • application-name 
    • tier-name 
    • node-name 

    AppDynamics Pro のセルフサービストライアル版では、エージェントはデフォルトの命名スキームを使用。「Javaエージェント」を参照。次のプロパティを追加することで、AppDynamics Pro の標準版で自動命名を使用することが可能。
    <auto-naming>true</auto-naming>

  5. エージェントがSaaSコントローラまたはその他のマルチテナントコントローラと接続する場合は、アカウント名を構成。すべてのコントローラについて、アカウントアクセスキーを構成。
    • account-name 
    • account-access-key
    コントローラを獲得すると、AppDynamics チームからのウェルカムメールでこの情報が届く。マルチテナントのオンプレミスコントローラの場合は、次の場所にこの情報がある。
    <controller_home>/initial_account_access_info.txt
  6. Javaエージェント構成プロパティ」を参照し、ご使用の環境で要求される追加のプロパティを構成。

次は、サンプル構成値での controller-info.xml ファイルを示しています。

<controller-info>
    <controller-host>192.168.1.20</controller-host>
    <controller-port>8090</controller-port>
    <application-name>ACMEOnline</application-name>
    <tier-name>InventoryTier</tier-name>
    <node-name>Inventory1</node-name>
</controller-info>
XML

JVM における Java エージェントのロード

エージェントの設定を構成したら、JVMにそのエージェントを追加できます。フレームワークによって追加の手順が異なります。一般的なアプローチでは JVM の起動コマンドに ‑javaagent 引数としてエージェントを指定します。 

-jar 引数の前に -javaagent 引数を追加してください。

 引数は Java エージェント JAR ファイルのロケーションを示している必要があります。

-javaagent:<agent_home>/javaagent.jar
CODE

Windowsでは、エージェントへのパスにドライブレターを含めます。

-javaagent:C:<agent_home>\javaagent.jar
CODE

一部のシナリオでは、単一のバックスラッシュの代わりに二重バックスラッシュを使用する必要があります。次に例を示します。

-javaagent:C:\\appdynamics\\javaagent.jar
CODE


スタートアップスクリプトに javaagent を追加するには、JVM の再起動が必要です。エージェントをインストールし、JVM の起動スクリプトを修正しているときに JVM を再起動できない場合は、実行している Java プロセスに動的にエージェントを添付できます。 

Java フレームワークまたはテクノロジーによる Java エージェントのインストール方法については、「Javaフレームワークによるエージェントのインストール」を参照してください。 

実行中の JVM プロセスへの Java エージェントの添付

実行中の JVM にエージェントを添付すると、JVM を再起動せずに Java エージェントをインストールできます。このアプローチは通常、‑javaagent 引数を JVM の起動スクリプトに追加する時、もしくはその他の継続的なアプローチとあわせて使用され、次回の JVM 起動時にエージェントが再びロードされます。ただし、JVM の再起動ができない、または不便な場合は、動的に添付することでエージェントをインストールできます。  

一部のシナリオでは、単一のバックスラッシュの代わりに二重バックスラッシュを使用する必要があります。次に例を示します。

-javaagent:C:\\appdynamics\\javaagent.jar
CODE

以下の場合に動的なエージェントの添付が可能です。

  • JVM は 1.6 以降。
  • JVM は Oracle(HotSpot)の JVM(IBM または JRockit の JVM の場合は不可)。 

その他の考慮すべき事項

  • すでに(AppDynamics Javaエージェントまたは別のタイプのエージェントのいずれかにより)インストゥルメント化されている環境に、エージェントを動的に添付しないでください。添付すると、予期せぬ問題やエラーが起こる可能性があります。 
  • 実行中の環境にAppDynamics Javaエージェントを添付すると、アプリケーションのインストゥルメント化に必要なクラスの再トランスフォーメーションをエージェントが実行しますが、アプリケーションのパフォーマンスに影響を与えます。エージェントのオーバーヘッドはプロセスを終了すると、通常のオペレーティングレベルに戻りますが、プロダクションサービスのパフォーマンスに影響を与える可能性があることを考慮してください。  

JVM にエージェントを添付する場合は、次の手順を実行します。

  1. 添付するJVMのプロセスIDを決定。
    Linux の場合、以下を使用します。

    ps -A | grep java

    Windowsの場合、以下を使用します。

    jps -l
  2. 次のコマンドを実行し、JDK の tools.jar ファイルへのパス、AppDynamics Java エージェント ホーム ディレクトリへのパス、および JVM プロセス ID 用のプレースホルダを、使用環境に適した値に置き換える。

    java -Xbootclasspath/a:<path_to_jdk>/lib/tools.jar -jar /<agent_home>/javaagent.jar <jvm_process_id> appdynamics.controller.hostName=<controller_hostname>,appdynamics.controller.port=<controller_port_no>,appdynamics.controller.ssl.enabled=false,appdynamics.agent.applicationName=<app_name>,appdynamics.agent.tierName=<agent_tier_name>,appdynamics.agent.nodeName=<agent_node_name>

    Windows の場合、ドライブレターなど同等のパスを使用します。以下に、システム出力を伴う例を示します。

    [appduser@my_centos6 ~]$ ps -A | grep java
     6780 pts/1    00:00:04 java
    [appduser@my_centos6 ~]$ java -Xbootclasspath/a:/usr/java/jdk1.7.0_79/lib/tools.jar -jar /home/appduser/appagent/javaagent.jar 6780
    Attaching to VM [6780]
    agent path &gt;&gt;&gt;/home/appduser/appagent/javaagent.jar=

Javaエージェントのインストールの確認

インストールが終了すると、<agent_home>/logs のエージェントログに次のメッセージが追加されます。

Started AppDynamics Java Agent Successfully
CODE

エージェントのログファイルが表示されない場合、Java エージェントが javaagent コマンドプロパティにアクセスしていない可能性があります。解決するには、STDOUT が記録されているアプリケーションサーバのログファイルを確認します。エージェントのトラブルシューティングに役立つフォールバックログメッセージがあります。

また、エージェントがコントローラ UI のコントローラに接続できることを確認してください。確認するには、コントローラ UI にログインし、ページ右上の [Settings] アイコンをクリックして [AppDynamics Agents] をクリックします。マシンのホスト名で、このリストからエージェントを探します。