その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

HikariCP のステータスを JMX 経由で取得する

HikariCP を使っていると,connection の状態をモニタリングしておきたくなると思います.例えば active な connection と idle 中の connection の比率を見たかったり,あるいは connection がリーク (アプリケーションが connection を borrow するだけして返却してない状態) していないかをモニタリングしたい,みたいなケースが挙げられるでしょう.
こうしたものはモニタリングしたくなるのが心情というものですし,モニタリングすべきだとも思っています.


開発中の環境だと HikariCP のデバッグログを出すことでそこから connection の情報を取得することが出来ますが,本番の環境だとそんなのは出さないし (HikariCP のデバッグログは結構量が多い) ,出したとしてもいちいちログを見てやっていくのはダルいので,やはり JMX で見たいという事になります.
そのやり方は至って簡単で,

final HikariDataSource dataSource = new HikariDataSource();
...
dataSource.setPoolName("pool-name");
dataSource.setRegisterMbeans(true);

という風に,dataSource.setRegisterMbeans(true); としてやることで HikariCP のメトリクスが JMX で取れるようになります *1


あとは jolokia なんかを使っている場合だと,

http://server.example.com/jolokia/read/com.zaxxer.hikari:type=Pool%20(pool-name)

という風にアクセスしてやると HikariCP の connection のステータスを取得することができるようになります.


あとは数値を取ってこういうグラフを描画することが可能.

f:id:moznion:20151213013152p:plain

Total の connection の個数を見つつ,その上に active,idle,awaiting な connection の状態を描画することで,connection のステータスが一目瞭然となります (ちなみに18:00 を超えた辺りで total の connection がガクッと落ちているのは再起動したからです).
便利ですね.


See Also: MBean (JMX) Monitoring and Management · brettwooldridge/HikariCP Wiki · GitHub

*1:registerMbeans: This property controls whether or not JMX Management Beans ("MBeans") are registered or not. Default: false https://github.com/brettwooldridge/HikariCP