JMXベースのモニタリングを5分で実現


JMX 初期はJ 2 EEの一部であるため、開発が「重い」という感じがし、多くのJavaプログラマーが自ら「軽量級」の案を実現することを選んだ.今日に至るまで、優れたオープンソースプロジェクトを借りて、JMXも「軽い」ことができるようになった.
pojo-mbeanを使用してMBeanを宣言
pojo-mbeanはAnnotationを使用してMBeanを宣言し、多くのJMX仕様で要求されているくどいコードを省き、どれだけくどいかはここを参照してください.例えば、ManagableServerはMBeanとして宣言することを望んでいます.2つのステップしかありません.
注釈
 
@MBean(objectName="jsmx:type=Demo")
class ManagableServer {
 
    @ManagedAttribute
    public long getCount() {...}
 
    @ManagedAttribute
    public int getGauge() {...}
 
    @ManagedOperation
    public void shutdown() {...}
}

登録
 
ManagableServer mBean = new ManagableServer();
new MBeanRegistration(mBean).register();

実行後、jconsoleでパブリッシュされたMBeanを表示できます.
jconsoleが監視に対する要求を満たすことができれば、以下の内容はもう見る必要はありません.
jolokiaを使用してMBeanにアクセス
jconsoleはJDKが持っている無料の仕事としてはやはり強力で、JVMの最も基本的な監視能力を提供しているが、デフォルトのRMI通信方式は安全上の理由で使用が制限される可能性がある.jololokiaはHTTP+JSONを通じてMBeanにアクセスすることを実現し、この問題をよく解決した.コードを追加する必要がなく使用することができる.起動コマンドで-javaagentオプションを指定するだけで実現できます.
 
java -javaagent:/path/to/jolokia-jvm-jdk6-x.xx-agent.jar=port=7777,host=localhost -cp ...

jolokiaが提供するjavascript APIを使用すると、図のような超軽量のweb consoleを作成できます.
jmxetricを使用してGangliaと統合
本当にアプリケーションを満たすweb consoleを開発するのは5分ではないに違いない.専門的な監視プラットフォームには多くの使用可能なものがあり、Gangliaはその一つである.問題のように、jmxetricはGangliaとの統合ソリューションを提供し、コードを追加する必要がなく、実現する2つのステップは:
データ収集ポイントの宣言
 
<jmxetric-config>
  <jvm process="JSMX" />
  <sample delay="10">
    <mbean name="jsmx:type=Demo" pname="Demo">
      <attribute name="count" type="int32" pname="Count" />
      <attribute name="gauge" type="int32" pname="Gauge" />
    </mbean>
  </sample>
  <ganglia hostname="localhost" port="8649" mode="multicast" wireformat31x="true" />
</jmxetric-config>

起動時(javaagent)ロード
 
java -javaagent:/path/to/jmxetric-0.0.x.jar=config=etc/jmxetric.xml,wireformat31x=true -cp ...

jmxetric-0.0.6でwireformat 31 xをtrueに設定するにはjavaagent optionでのみ有効にするにはissue 25を参照してください.
Gangliaでの効果は次のとおりです.
終わりの言葉
細部は悪魔だ!「5分」は少しタイトル党ですが、豊富なオープンソース資源は確かにJMXの使用を非常に容易にしました.完全なDemoはここにあります.もっともっと良いアイデアを期待しています.