コンテンツにスキップ

JVMの監視

jvmguardがインストールされると、ローカルマシンで実行されているJVMにエージェントを追加できます。

jvmguardエージェントはJavaエージェントです。-javaagent JVMオプションを指定してVMにロードされます。Javaエージェントは、ロード時にクラスをインスツルメントしたり、すでにロードされたクラスを再変換したりできます。

VMを監視対象にするには、アプリケーションサーバーやアプリケーションの起動スクリプトに挿入する必要がある実際のJVMオプションを知る必要があります。jvmguardエージェントはすでにjvmguardのインストールディレクトリにあり、jvmguard UIが正しい-javaagent JVMオプションの構築方法を表示します。

まず、ヘッダーの「VMを追加」ボタンをクリックします。

jvmguardエージェントはすでにjvmguardのインストールディレクトリにあるため、ローカルで実行されているVMを簡単に監視できます。「VMを追加」ダイアログには、追加設定なしの最も単純なケースの完全な-javaagent JVMオプションが表示されます。単一のVMの監視に適しています。

serverオプションがない場合、エージェントはjvmguardサーバーがlocalhostで実行されていると仮定します。グループ名とプール名に関する詳細な説明は後述します。

複数のVMを監視する場合、jvmguard UIで識別できるように名前を付ける必要があります。VM名を割り当てるには、-javaagent JVMオプションにnameオプションを渡します。

-javaagent:[path to jvmguard.jar]=server=[IP/host],name=[VM name]

各名前は、同時に1つのVMのみが使用できます。2番目のVMが同じ名前で監視を要求すると、そのVMが引き継ぎ、以前に接続されていたVMは切断されます。一意の名前を割り当てられないVMのプールがある場合は、後述のVMプールのセクションを参照してください。

VM名に加えて、VMを階層にグループ化できます。デフォルトでは、VMはトップレベルグループに挿入されます。別のグループに割り当てるには、JVMオプションにgroupオプションを設定します。

-javaagent:[path to jvmguard.jar]=server=[IP/host],name=[VM name],group=[group name]

グループ名では、Web/Workers/Gen3のようにスラッシュで階層レベルを区切ります。完全な-javaagentパラメータは次のようになります。

-javaagent:/opt/jvmguard/jvmguard.jar=server=192.198.0.33,name=web,group=Web/Workers/Gen3

VM名は同じグループ内で一意である必要があります。

インスタンスが動的にプロビジョニングされるクラウド環境など、VMに一意の名前を設定できないことがあります。その場合、VMをVMプールに割り当てることができます。

-javaagent:/opt/jvmguard/jvmguard.jar=server=192.198.0.33,pool=Web/Workers

groupオプションと同様に、poolオプションは階層の区切りとしてスラッシュを使用する階層名を取ります。poolオプションはnameオプションと組み合わせることはできません。groupオプションとは組み合わせることができ、その場合、プールはそのグループの下にネストされます。

プールでは、監視対象のVMには一意の識別子を持つ名前が与えられます。VMが切り離されると、この識別子が再び使用されることはありません。名前付きVMとは異なり、単一のプールVMのデータは短期間しか保持されないため、インスタンスごとの長期履歴はありません。ただし、プール全体の履歴をたどって、時間経過に伴う傾向を分析できます。

デフォルトでは、jvmguardサーバーはポート8847でVM接続をリッスンします。これは、監視対象VMがjvmguardサーバーに到達できるようにファイアウォールで開く必要があるポートです。

jvmguardサーバーは、config/application.yamlvmPortプロパティを設定することで、別のポートを使用するように設定できます。これは、ポートがすでに使用されている場合や、同じマシンにjvmguardの複数のインスタンスをインストールする場合に必要です。

このようなデフォルト以外のポートをエージェントに伝えるには、-javaagent JVMオプションにportオプションを追加する必要があります。例えば、次のようになります。

-javaagent:/opt/jvmguard/jvmguard.jar=server=192.198.0.33,port=8912,name=test

jvmguardエージェントは、Linux/Unixでは$HOME/.jvmguard/log、Windowsでは%USERPROFILE%\.jvmguard\logディレクトリにエラーを記録します。ログファイルはオンデマンドで作成され、何も記録されなければファイルは作成されません。ログファイルの名前は<VM name>.logで、<VM name>はnameまたはpoolパラメータの値です。namepoolのどちらも指定されていない場合、ファイル名はjvm.logになります。

別のファイルに記録するには、-javaagent JVMオプションにlogFile=<path to log file>オプションを追加できます。ロギングを完全に無効にするには、logEnabled=falseオプションを追加します。

相互認証と暗号化は、jvmguard.jarファイルと同じディレクトリにあるエージェントキーストアファイルagent.ksによって有効になります。エージェントキーストアはサーバーによって生成され、jvmguardデータディレクトリの下のsslディレクトリにあります。

config/application.yamlvmUseSslプロパティがtrueに設定されている場合、jvmguard UIからダウンロードするエージェントファイルにエージェントキーストアファイルが自動的に追加されます。その場合、暗号化と認証はそのまま機能します。

監視対象VMをセットアップした後で暗号化と認証をオンまたはオフに切り替える場合は、次の変更を手動で行う必要があります。

  • 暗号化をオンにする: [jvmguardデータディレクトリ]/ssl/agent.ksを見つけ、VMが監視されているすべてのマシンのエージェントインストールにコピーします。キーストアファイルは、jvmguard.jarファイルと同じディレクトリにコピーする必要があります。正しいエージェントキーストアが存在しない場合、サーバーはエージェントからの接続を拒否します。
  • 暗号化をオフにする: VMが監視されているすべてのマシンのエージェントインストールで、jvmguard.jarファイルの隣にあるagent.ksファイルを削除します。そのファイルが存在し、サーバーが暗号化を使用していない場合、エージェントはサーバーへの接続を拒否します。

エージェントキーストアファイルを別のパスに保持したい場合は、-javaagent VMパラメータにkeyStoreオプションを追加します。例えば、次のようになります。

-javaagent:/opt/jvmguard/jvmguard.jar=server=192.198.0.33,keyStore=/sec/agent.ks,name=test