GrafanaでJavaヒープ使用率のパネルを作る
jmxtransというツールでJavaのメトリックを取得して、Grafanaでパネル表示させてみました。
構成はこんな感じ
1. jmxtransインストール
rpmでインストールしました。
パッケージのダウンロードやインストール方法はこちらで。
https://github.com/jmxtrans/jmxtrans/wiki/Installation
2. jsonファイルを準備
apserver01への接続方法と、メトリックの格納方法をファイルに書きます。
{ "servers" : [ { "port" : "39999", # JMXポート "host" : "apserver01", # APサーバのホスト名 "queries" : [ { # Java Heap "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.10.1:8086/", # 格納先influxdbのURL "username" : "admin", # influxdbのユーザ名 "password" : "admin", # influxdbのパスワード "database" : "influxdb", # 格納先DB名 "tags" : {"application" : "ap01"} # メトリックのタグ } ], "obj" : "java.lang:type=Memory", # オブジェクトタイプ "resultAlias":"jvmMemory", # Alias "attr" : [ "HeapMemoryUsage", "NonHeapMemoryUsage" ] # 属性 },{ } ] }
オブジェクトタイプや属性は、事前にjconsole等で確認しておくといい。
オブジェクトタイプ、属性が複数ある場合、(例えばJavaHeap以外にもThreadPoolやold、new領域等を取得したい場合)は、
以下のようにオブジェクト毎に並べて記述する。
※まとめて記述する方法があるかもしれません。。。
{ "servers" : [ { "port" : "39999", "host" : "apserver01", "queries" : [ { "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.10.1:8086/", "username" : "admin", "password" : "admin", "database" : "influxdb", "tags" : {"application" : "ap01"} } ], "obj" : "java.lang:type=Memory", "resultAlias":"jvmMemory", "attr" : [ "HeapMemoryUsage", "NonHeapMemoryUsage" ] },{ "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.10.1:8086/", "username" : "admin", "password" : "admin", "database" : "influxdb", "tags" : {"application" : "ap01"} } ], "obj" : "java.lang:type=GarbageCollector,name=*", "resultAlias": "jvmMemory", "attr" : [ "CollectionCount", "CollectionTime" ] },{ "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.10.1:8086/", "username" : "admin", "password" : "admin", "database" : "influxdb", "tags" : {"application" : "ap01"} } ], "obj" : "java.lang:name=CMS Old Gen,type=MemoryPool", "resultAlias": "cmsoldgen", "attr" : [ "Usage" ] },{ "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.10.1:8086/", "username" : "admin", "password" : "admin", "database" : "influxdb", "tags" : {"application" : "ap01"} } ], "obj" : "java.lang:type=MemoryPool,name=Par Eden Space", "resultAlias": "edengen", "attr" : [ "Usage" ] },{ "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.10.1:8086/", "username" : "admin", "password" : "admin", "database" : "influxdb", "tags" : {"application" : "ap01"} } ], "obj" : "java.lang:type=MemoryPool,name=Par Survivor Space", "resultAlias": "survivorgen", "attr" : [ "Usage" ] },{ "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.10.1:8086/", "username" : "admin", "password" : "admin", "database" : "influxdb", "tags" : {"application" : "ap01"} } ], "obj" : "java.lang:type=MemoryPool,name=CMS Perm Gen", "resultAlias": "cmspermgen", "attr" : [ "Usage" ] },{ "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.10.1:8086/", "username" : "admin", "password" : "admin", "database" : "influxdb", "tags" : {"application" : "ap01"} } ], "obj" : "java.lang:type=Threading", "resultAlias": "jvmMemory", "attr" : [ "DaemonThreadCount", "PeakThreadCount", "ThreadCount", "TotalStartedThreadCount" ] } ] } ] }
作成したファイルはファイル名を<適用な名前>.jsonとして、以下に配置する。
/var/lib/jmxtrans/
(3) jmxtransを起動
# /etc/init.d/jmxtrans start Starting JmxTrans...
起動失敗したらconfigが間違ってると思います。
(4) Grafanaパネル作成
パネルのQuery設定で、SQLを書きます。
事前に以下のようにVariablesを設定しておきます。
以下は参考のSQLです。これはJavaヒープサイズのMAX値(-Xmx)を取得するものです。
SELECT mean("HeapMemoryUsage_max") FROM "autogen"."jvmMemory" WHERE ("hostname" =~/^$host$/ AND "application" =~ /^$host$ AND "application" =~ /^$app$/) AND $timeFilter GROUP BY time($inter_val) fill(none)
SQLをパネルのQuery設定に記述
Javaヒープ使用率のパネルができました。
同じようにJavaヒープ以外もパネルにして、並べて表示。