fluent-plugin-jstatを作った
jstatの結果を入力とするfluent-plugin-jstatを作りました。
GitHub - wyukawa/fluent-plugin-jstat
fluent-plugin-jstat | RubyGems.org | your community gem host
JavaアプリケーションのモニタリングというとJMXが思い浮かぶと思いますが、
JMXはアプリ起動時に-Dcom.sun.management.jmxremoteとか指定しないといけないし、
JMXほど大げさじゃなくてもっとカジュアルにモニタリングしたい時もあると思います。
そんなときにはjstatが使えます。
jstatを使ったモニタリングは下記に詳しいです。ここではjstatの結果をderived経由でGrowthforecastに送っています。
derivedがプラグインアーキテクチャになってGrowthForecastに直接POSTできるようになったので、Javaのヒープのモニタリングをしてみた - blog.nomadscafe.jp
上記ブログのようなことをfluentdでやれないかな〜と思ってちょっと試してみました。
僕はhiveserverのモニタリングで試してみました。
fluentdのin_execでjstatの結果を受け取ってGrowthforecastに送るということも出来ると思いますが、
ものは試しでプラグイン作ってみました。
プラグインは簡単に作れました。in_gc_stat.rbをコピペしてちょろっと修正しただけですw
設定はこんな感じ。
<source> type jstat option -gcutil emit_interval 60 tag hiveserver.jstat pid_path /var/run/hive-thrift.pid scale 100 </source>
jstatには監視対象のプロセスIDを渡さないといけないのでそこはpidファイルを指定するようにしました。
scaleはjstatコマンドの結果を何倍かしたいときに使います。
scaleのデフォルトは1、つまりjstatの結果をそのまま使います。out_stdoutで出力するとこんな感じです。
2014-03-17 13:44:36 +0900 hiveserver.jstat: {"S0":0.0,"S1":0.0,"E":1.25,"O":41.29,"P":63.54,"YGC":253.0,"YGCT":1.519,"FGC":252.0,"FGCT":137.145,"GCT":138.665}
scaleを100つまり100倍にするとこんな感じです。
2014-03-17 13:44:36 +0900 hiveserver.jstat: {"S0":0.0,"S1":0.0,"E":125.0,"O":4129.0,"P":6354.0,"YGC":25300.0,"YGCT":151.9,"FGC":25200.0,"FGCT":13714.5,"GCT":13866.5}
100倍したものをGrowthforecastに送って、Growthforecast側で1/100にします。
Growthforecastに送る設定はこんな感じ。ヒープ使用率とFull GC回数を送ってます。ホスト名を入れたかったのでfluent-plugin-forestも使いました。
<match hiveserver.jstat> type forest subtype growthforecast <template> gfapi_url http://example.com:5125/api/ service hiveserver section jstat_${hostname} name_keys O,FGC </template> </match>
グラフはこんな感じ
Full GCによりがつっとヒープが減ってますね。