只用五分鐘爲系統實現基於JMX的監控

JMX 早期是做爲J2EE的一部分, 所以總給人一種開發起來會很"重"的感受, 這讓很多Java程序員寧願選擇自行實現"輕量級"方案. 時至今日, 藉助一些優秀的開源項目, JMX 也能夠用起來很"輕".javascript

使用 pojo-mbean 聲明MBean

pojo-mbean 使用Annotation對MBean進行聲明, 省去很多 JMX規範中要求的羅嗦代碼, 不知道有多羅嗦的請見 這裏 . 例如, ManagableServer 但願被聲明爲一個MBean, 只有兩個步驟:html

註解

@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.java

mbean in jconsole

若是 jconsole 就能夠知足你對監控的要求, 那麼下文的內容大可沒必要再看啦.git

使用 jolokia 訪問MBean

jconsole 做爲JDK自帶的們免費工做仍是很強大的, 它提供JVM最基本的監控能力, 然而默認的RMI通信方式可能會因爲安全緣由而被限制使用.
jolokia 實現了經過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, 如圖:github

web console

使用 jmxetricGanglia 集成

開發一個真正知足應用的 web console 確定不是5分鐘可以搞定的, 專業的監控平臺仍是有不少可供使用的, Ganglia 即是其中之一.
如題所述, jmxetric 就提供方便與 Ganglia 集成解決方案, 一樣無需額外編寫代碼, 實現的兩個步驟是:web

聲明數據採集點

<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中, 若要設置wireformat31x爲true只有在 javaagent option中設置才能生效, 詳情請見 issue25 .api

Ganglia 中的效果是:安全

jmx in ganglia

結束語

細節是魔鬼! "5分鐘"雖有點標題黨, 但豐富的開源資源確實令JMX使用變的超級容易啦.完整的Demo在 這裏 . 期待更多更好更有創意的作法!oracle

相關文章
相關標籤/搜索