#chiroito ’s blog

Java を中心とした趣味の技術について

Infinispan / Red Hat Data Grid を監視する

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%" ^
(略)

参考資料