Infinispan (Red Hat Data Grid) が提供している監視に使える機能についてまとめました。環境に合わせて適宜設定することをお勧めします。
この記事では Infinispan および Red Hat Data Grid のインストール先のディレクトリをINFINISPAN_HOME
としています。
ログ出力
出力したいログの設定は${INFINISPAN_HOME}/server/conf/log4j2.xml
で定義します。設定ファイルの名前の通り、設定はLog4j 2の形式で設定します。
ログはデフォルトで{INFINISPAN_HOME}/server/log
に出力されます。
メトリクス
Infinispan は OpenMetrics 形式でメトリクスを提供しています。このメトリクスはHTTPでアクセスできます。そのため、このURLを指定することでさまざまな監視ツールからメトリクスを収集できます。
Infinispan のメトリクスは JMX を使用して MBean にアクセスすることでも取得できますが、今の時代では使われることが少ないので省略します。必要な場合は参考資料をご覧ください。
メトリクスを有効にするには、${INFINISPAN_HOME}/server/conf/infinispan.xml
などのInfinispanの設定ファイルでcache-container
要素のstatistics
属性にtrue
を設定します。
<cache-container name="default" statistics="true"> 略 </cache-container>
この設定をしてInfinispanを起動するとHTTPでメトリクスが公開されます。
URL は以下の通りです。
http://<ホスト名>:<ポート番号>/metrics/
以下のようなメトリクスが出力されます。
# HELP base_memory_committedNonHeap_bytes Displays the amount of memory that is committed for the Java virtual machine to use. # TYPE base_memory_committedNonHeap_bytes gauge base_memory_committedNonHeap_bytes 9.5879168E7 # HELP base_memory_maxHeap_bytes Displays the maximum amount of memory in bytes that can be used for memory management. # TYPE base_memory_maxHeap_bytes gauge base_memory_maxHeap_bytes 1.70917888E10 # HELP base_gc_time_total Displays the approximate accumulated collection elapsed time in milliseconds. This attribute displays -1 if the collection elapsed time is undefined for this collector. The Java virtual machine implementation may use a high resolution timer to measure the elapsed time. This attribute may display the same value even if the collection count has been incremented if the collection elapsed time is very short. # TYPE base_gc_time_total counter base_gc_time_total_seconds{name="G1 Young Generation1"} 0.037 (略)
ヘルス
Infinispanはクラスタの状態とキャッシュマネージャの状態を REST API として提供しています。
クラスタの状態
クラスタの状態を取得するには以下の URL へアクセスします。
http://<ホスト名>:<ポート番号>/rest/v2/cache-managers/<キャッシュマネージャ名>/health
URL にはキャッシュマネージャ名を付与します。
キャッシュマネージャ名はデフォルトではdefault
になります。この場合、以下のURLになります。
http://<ホスト名>:<ポート番号>/rest/v2/cache-managers/default/health
出力される結果は以下の通りです。
{ "cluster_health":{ "cluster_name":"cluster", "health_status":"HEALTHY", "number_of_nodes":1, "node_names":["Development-59678"] }, "cache_health":[ {"status":"HEALTHY","cache_name":"javaChildCache"}, {"status":"HEALTHY","cache_name":"___protobuf_metadata"}, {"status":"HEALTHY","cache_name":"protoBufChildUngroupCache"}, {"status":"HEALTHY","cache_name":"javaParentCache"}, {"status":"HEALTHY","cache_name":"protoBufParentUngroupCache"}, {"status":"HEALTHY","cache_name":"protoBufParentCache"}, {"status":"HEALTHY","cache_name":"protoBufChildCache"}, {"status":"HEALTHY","cache_name":"___script_cache"} ] }
キャッシュマネージャの状態
キャッシュマネージャの状態を取得するには以下の URL へアクセスします。
http://<ホスト名>:<ポート番号>/rest/v2/cache-managers/<キャッシュマネージャ名>/health/status
URL にはキャッシュマネージャ名を付与します。
キャッシュマネージャ名はデフォルトではdefault
になります。この場合、以下のURLになります。
http://<ホスト名>:<ポート番号>/rest/v2/cache-managers/default/health/status
出力される結果は以下の通りです。
HEALTHY
JDK Flight Recorder
Java 11以降もしくはJava 8の場合はupdate 272以降の Java を使っている場合は JDK Flight Recorder を使いましょう。
Javaの実行時VM引数に-XX:StartFlightRecording=name=DefaultRecording,settings=default,disk=true,filename=DefaultRecording.jfr,dumponexit=true
を追加してください。
シェルから起動している場合
シェルから起動している場合は、${INFINISPAN_HOME}/bin/server.sh
もしくは${INFINISPAN_HOME}/bin/server.bat
の最後 java
コマンドを実行しているところに追加します。
server.sh
eval \"$JAVA\" $JAVA_OPTS \ -Dvisualvm.display.name=$PROCESS_NAME \ -XX:StartFlightRecording=name=DefaultRecording,settings=default,disk=true,filename=DefaultRecording.jfr,dumponexit=true \ -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager \
server.bat
"%JAVA%" %JAVA_OPTS% -showversion ^ -Dvisualvm.display.name=%PROCESS_NAME% ^ -XX:StartFlightRecording=name=DefaultRecording,settings=default,disk=true,filename=DefaultRecording.jfr,dumponexit=true ^ "-Dinfinispan.server.home.path=%ISPN_HOME%" ^ (略)