munin-java-plugins を使って tomcat の監視をした際のメモ。簡単と思いきや、意外とハマった。
インストール
EPEL が有効になっている前提で、次のようにする:
$ sudo yum install munin-java-plugins
$ rpm -q munin-java-plugins
munin-java-plugins-2.0.19-1.el6.noarch
java, tomcat のバージョン:
jdk-1.7.0_45-fcs.x86_64
apache-tomcat-7.0.47
tomcat の設定
jmx 経由で値をとるので tomcat の起動時に以下の CATALINA_OPTS を渡す
CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=5600 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false"
munin plugin の設定
$ cat /etc/munin/plugin-conf.d/jmx
[jmx_*]
env.ip 127.0.0.1
env.port 1616
env.JRE_HOME /usr/java/jdk1.7.0_45/jre
env.JAVA_OPTS -Xmx128m
$ sudo /sbin/service munin-node restart
plugin の指定
ググると jmx_MultigraphAll を指定すればいいような記述があって、最初はそれで運用していたけど、エラーになっていくつかのグラフしか描画されなかった。
$ sudo ln -s /usr/share/munin/plugins/jmx_ /etc/munin/plugins/jmx_MultigraphAll
でも munin-run jmx_MultigraphAll
で見るとちゃんと値が取れているように見える。
小一時間、出力とログをにらめっこして間違い探しをしたけど、何が悪いのか分からない。
結局、multigraph ではなく、一つ一つグラフを指定すればちゃんとグラフが出来るので、手でリンクをはることにした。最初からこうすればよかった。
$ munin-run jmx_MultigraphAll | grep multigraph | cut -d' ' -f 2
jmx_memory
jmx_MemoryAllocatedHeap
jmx_MemoryAllocatedNonHeap
jmx_GCTime
jmx_GCCount
jmx_MemoryCode_CacheUsage
jmx_MemoryCode_CachePeak
jmx_MemoryCode_CacheUsagePostGC
jmx_MemoryEdenUsage
jmx_MemoryEdenPeak
jmx_MemoryEdenUsagePostGC
jmx_MemoryPermGenUsage
jmx_MemoryPermGenPeak
jmx_MemoryPermGenUsagePostGC
jmx_MemorySurvivorUsage
jmx_MemorySurvivorPeak
jmx_MemorySurvivorUsagePostGC
jmx_MemoryTenuredGenUsage
jmx_MemoryTenuredGenPeak
jmx_MemoryTenuredGenUsagePostGC
jmx_Threads
jmx_threads.historical
jmx_ThreadsDeadlocked
jmx_Uptime
jmx_ClassesLoaded
jmx_ClassesUnloaded
jmx_ClassesLoadedTotal
jmx_CompilationTimeTotal
jmx_ProcessorsAvailable
for g in `munin-run jmx_MultigraphAll | grep multigraph | cut -d' ' -f 2`; do
sudo ln -s /usr/share/munin/plugins/jmx_ /etc/munin/plugins/$g
done
この後、jmx_Uptime とかあきらかに不要なプラグインを削除した。
各グラフの意味
名前からある程度推測はできるけど、実際それぞれのプラグインで何を取っているのかは、ソースコードから確認できる