ちょっとJVMってかMBeanの情報をぶっこぬくツールを作る必要があって、最初jythonで作ったんだけどjythonにはいろいろ失望した。で、同僚にJolokiaってのがあると教えてもらったのですが、これがなかなかイケてる。Jolokiaというのは、簡単に言うと、MBeanにHTTP経由でアクセスできるようにjmxの口を空けてくれるJavaのエージェント。こいつをJavaプログラムやJavaなミドルウェアに仕込んでやるだけでHTTPの口が空いて、そこ経由でいろいろできる。レスポンスはJSONで帰ってくる。
Cassandraの記事はまた次回www まぁ、今回もJolokiaに手を出したのもCassandra起因なんだけどね。Cassandraはレイテンシやリード/ライト数がMBeanに格納されてて、そいつを抜いてグラフ描画させたいなぁ、と。Cassandraのマネジメントツールとしては、DATASTAXのOpsCenterがあったりするんだけど、如何せん重いんだわ・・・ノード数多いと。



1. Jolokia

↓が公式サイト。チュートリアルやマニュアルもちゃんとあります。

2. インストール

上記サイトからjolokiaのライブラリをダウンロードして適当な場所に配置する(例えば/usr/local/lib)。んで、Java起動時に-javaagent:/usr/local/lib/jolokia-jvm-1.0.6-agent.jarを与えてやるだけ。デフォルトでは8778ポートが空きますが、下記のようにポートやリスンIPを指定することもできる(ポートはまあデフォルトで問題ないでしょう)。

Javaなミドルウェアの$JVM_OPTSに加えるなら↓みたいな感じになるかな。

1
JVM_OPTS="$JVM_OPTS -javaagent:/usr/local/lib/jolokia-jvm-1.0.6-agent.jar=port=8778,host=xx.xx.xx.xx"

3. 使い方の例

HTTPの口が開いているということはいわずもがな、curlやらなんやらで簡単に情報を取得できる。レスポンスはJSONで帰ってくる。

(1) メモリの情報を抜く

下記のようにすることでヒープ領域などの使用量が取得できる。

1
curl  http://xx.xx.xx.xx:8778/jolokia/read/java.lang:type=Memory

(2) Cassandraの情報を抜く

下記のようにしてCassandraのMBeanにアクセス。キースペース/カラムファミリのリード数/ライト数/レイテンシ/ペンディングタスク・・・その他もろもろが取得できる。

1
curl  http://xx.xx.xx.xx:8778/jolokia/read/org.apache.cassandra.db:type=ColumnFamilies,keyspace=XXXX,columnfamily=YYYY

ちょっと↑だと情報大杉じゃねーの?って思う場合は、リクエストURIに取得する情報を明示してあげると、そこだけ取得できる。下記の例は、とあるkeyspace/columnfamilyのRecentReadLatencyMicrosだけを取得するリクエスト。


1
2
3
curl  http://xx.xx.xx.xx:8778/jolokia/read/org.apache.cassandra.db:type=ColumnFamilies,keyspace=XXXX,columnfamily=YYYY/RecentReadLatencyMicros</p>
# ↓はレスポンス
{"timestamp":1354510284,"status":200,"request":{"mbean":"org.apache.cassandra.db:columnfamily=YYYY,keyspace=XXXX,type=ColumnFamilies","attribute":"RecentReadLatencyMicros","type":"read"},"value":1564.3034648541113}

(3) FullGCを命令する

情報の取得だけではなく、フルGCを発生させることもできる。

1
curl  http://xx.xx.xx.xx:8778/jolokia/exec/java.lang:type=Memory/gc

 

 

ぶっこ抜いたjsonをMongoDBにでも入れたりしとけば、あとでいろいろ解析したりできるね。

 

3 Responses to JolokiaでMBeanにアクセスする

  1. […] こちらの「JolokiaでMBeanにアクセスする」の記事を参考にさせて頂くと… […]

  2. […] とコマンドを実行することが出来るようです。(※参考) […]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Set your Twitter account name in your settings to use the TwitterBar Section.