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

壹頁書發表於2015-12-31
轉載自:
http://my.oschina.net/zhongl/blog/29075

JMX 早期是作為J2EE的一部分, 因此總給人一種開發起來會很"重"的感覺, 這讓不少Java程式設計師寧願選擇自行實現"輕量級"方案. 時至今日, 藉助一些優秀的開源專案, JMX 也可以用起來很"輕".
使用 pojo-mbean 宣告MBean
pojo-mbean 使用Annotation對MBean進行宣告, 省去不少 JMX規範中要求的羅嗦程式碼, 不知道有多羅嗦的請見 這裡 . 例如, ManagableServer 希望被宣告為一個MBean, 只有兩個步驟:

註解

  1. @MBean(objectName="jsmx:type=Demo")  
  2. class ManagableServer {  
  3.    
  4.     @ManagedAttribute  
  5.     public long getCount() {...}  
  6.    
  7.     @ManagedAttribute  
  8.     public int getGauge() {...}  
  9.    
  10.     @ManagedOperation  
  11.     public void shutdown() {...}  
  12. }  

註冊
  1. ManagableServer mBean = new ManagableServer();  
  2. new MBeanRegistration(mBean).register();  

執行之後, 你可以通過 jconsole 檢視到已經發布的MBean.



如果 jconsole 就可以滿足你對監控的要求, 那麼下文的內容大可不必再看啦.

使用 jolokia 訪問MBean
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, 如圖:




使用 jmxetric 與 Ganglia 整合
開發一個真正滿足應用的 web console 肯定不是5分鐘能夠搞定的, 專業的監控平臺還是有很多可供使用的, Ganglia 便是其中之一. 
如題所述, jmxetric 就提供方便與 Ganglia 整合解決方案, 同樣無需額外編寫程式碼, 實現的兩個步驟是:
宣告資料採集點
  1. <jmxetric-config>  
  2.   <jvm process="JSMX" />  
  3.   <sample delay="10">  
  4.     <mbean name="jsmx:type=Demo" pname="Demo">  
  5.       <attribute name="count" type="int32" pname="Count" />  
  6.       <attribute name="gauge" type="int32" pname="Gauge" />  
  7.     </mbean>  
  8.   </sample>  
  9.   <ganglia hostname="localhost" port="8649" mode="multicast" wireformat31x="true" />  
  10. </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 .
在 Ganglia 中的效果是:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1969305/,如需轉載,請註明出處,否則將追究法律責任。

相關文章