JMX監視のご紹介

作成日 2024/07/03

はじめに

今回、この記事ではJMX監視についてご紹介します。
ぜひ、監視設計の際に参考にしていただいければと思います。

JMX監視とは

JMXとは"Java Management Extensions"の略称で、
Javaアプリケーションをモニターおよび管理するための仕様です。

 

JMX監視は、JMX接続により取得したJavaアプリケーションのヒープメモリサイズ等の内部状態を監視します。

 

Hinemosではクラス情報、ガーベジコレクタ情報、メモリ情報、
スレッド情報、JVMプロセス情報、Hinemos状態情報について監視する事が可能です。

実際に監視設定を作成してみる

今回はJMX監視を使用して、Hinemosマネージャ内部の状態をチェックする設定を作成してみます。

 

設定したHinemosマネージャサーバ情報とHinemosマネージャで使用したJava情報は以下になります。

 

・OS:RHEL 8

・Hinemos ver.7.0.1

・Java:OpenJDK1.8.0

 

Hinemosマネージャ以外を監視対象とする場合ですが、
Hinemosマネージャの場合と一部前提条件が異なるため、今回は説明を省略します。

前提条件

Hinemosマネージャ自身を監視対象とする際の前提条件は以下になります。

 

1.監視対象ノードのホスト名が、ホストのIPアドレスに正しく解決されている

2.監視対象ノードが、マネージャサーバからのJMXのリクエストに応答できる

3.監視対象ノードで、JMXリモートの設定をしている

 

前提条件1:監視対象ノードのホスト名が、ホストのIPアドレスに正しく解決されている

監視対象ノードで以下のコマンドを実行し、ホスト名がホストのIPアドレスに正しく解決される必要があります。

 

(root)# hostname -i
【ホストのIPアドレス】

 

実行した際に"127.0.0.1"が出力された場合、正しくJMX監視が出来ません。
ループバックアドレス以外が出力されるようにOSの設定を見直してください。

 

前提条件2:監視対象ノードが、マネージャサーバからのJMXのリクエストに応答できる

HinemosマネージャサーバからのJMXリクエストは、デフォルトで7100ポートを使用します。
既に7100ポートが使用されている場合、Hinemosマネージャ起動前にhinemos.cfgを以下のように変更してください。

 

ファイル配置場所:/opt/hinemos/etc/hinemos.cfg

JMX_PORT=【JMXが使用するポート番号】

 

前提条件3:監視対象ノードで、JMXリモートの設定をしている

監視対象にしたいJavaプロセスの起動引数に以下を設定します。
以下を設定する場合、改行は入れず、1行で追加してください。

 

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=[任意のポート]
-Dcom.sun.management.jmxremote.authenticate=false  ※1
-Dcom.sun.management.jmxremote.ssl=false  ※1
-Dcom.sun.management.jmxremote.rmi.port=[任意のポート] ※2

※1 上記の設定ではパスワード認証、SSLの設定は無効になっているため、必要な場合は適宜設定をしてください。
※2 ファイアウォールを介して監視をする場合、Javaプロセスの起動引数に追加してください。(Java 7 update4以降のバージョンでのみ設定可能)

 

監視対象をHinemosマネージャとする場合、hinemos.cfgで設定を行います。
デフォルトでは以下のように設定されているため設定不要です。
ファイアウォールを介して監視する場合は"-Dcom.sun.management.jmxremote.rmi.port="を追加してください。
以下は2行目から7行目で改行を入れていますが、デフォルトで2行目は1行で記載しています。

 

ファイル配置場所:/opt/hinemos/etc/hinemos.cfg

### JVM - JConsole/VisualVM
export JVM_JCONSOLE_OPTS="
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=${JMX_PORT} 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=true 
-Dcom.sun.management.jmxremote.password.file=${HINEMOS_ETC_DIR}/jmxremote.password 
-Dcom.sun.management.jmxremote.access.file=${HINEMOS_ETC_DIR}/jmxremote.access

 

今回はファイアウォールを介して監視を行わないため、追加は省略します。

 

JMX接続の認証情報

JMX監視設定で入力するJMX接続情報のデフォルトの認証情報は、以下になります。

 

・ポート番号:7100

・ユーザ:hinemos

・パスワード:hinemos

 

7100ポートが既に使用されているため変更した場合は、変更後のポート番号を認証情報として使用してください。

 

JMX接続ユーザはデフォルトでhinemosユーザのみ使用する事が可能です。
hinemosユーザ以外を使用する場合は、下記の2つのファイルを編集してください。
当該ファイル編集後にHinemosマネージャの再起動を行うことで設定が反映され、変更後のユーザを使用する事が可能です。

 

1.JMXの接続ユーザ、アクセス権限を変更する
 ファイル配置場所:/opt/hinemos/etc/jmxremote.access

 

【ユーザ名】 【アクセス権限】
例)hinemos readwrite

 

2.  1で設定したユーザのパスワードを変更する
 ファイル配置場所:/opt/hinemos/etc/jmxremote.password

 

【ユーザ名】 【パスワード】
例)hinemos hinemos

監視設定

今回は以下のように、[Hinemos] 利用可能なヒープ容量を監視します。
判定値は0~300Mbyte未満を情報、
300~500Mbyte未満を警告、500Mbyte以上を危険となるように設定しました。

 

[条件] >[チェック設定]で入力するポート、ユーザ、パスワードについては、
前項の「JMX接続の認証情報」で確認した値を入力してください。

  01.JMX監視設定

監視結果

監視結果は以下のように、利用可能なヒープ容量が189Mbyteであることが確認出来ました。

  02.JMX監視結果1
  03.JMX監視結果2

おわりに

この記事ではJMX監視についてご紹介しました。

ご覧いただきありがとうございました。