2011-07-07 33 views
11

我想實現一個nagios插件,並且這樣做需要我知道具體要監視的對象和屬性。問題是,我一直無法在標準系統jmx對象和屬性的任何地方找到列表。任何人都可以將我指向正確的方向嗎?我需要監視內存池,堆大小等內容。JMX對象和屬性列表?

回答

17

您可以隨時使用mBeanServer.queryNames(null, null);用於獲取在某一MBeanServer中註冊的所有MBean(其中mBeanServer是你獲得的本地或遠程的MBeanServerConnection)。

但是,在實施您自己的Nagios插件之前,爲什麼不使用已經存在的插件呢?例如。 jmx4perlcheck_jmx4perl附帶了用於瀏覽JMX名稱空間的工具(如jmx4perl <url> list列出所有JMX MBean及其屬性和操作,或j4psh具有基於readline的JMX外殼且具有上下文相關的命令行完成)。

+0

好吧,我們一直在看check_jmx,這是一個已經創建的。我會研究jmx4perl。謝謝! – Matthew

0

您是否在尋找JVM platform MBean docs

有些例子可以獲得MBeans並詢問它們,例如

ThreadMXBean平臺MBean 提供監視線程 爭奪和線程的CPU時間的支持。

+0

說實話,我不知道?我希望會有某種「這是每個對象的列表,這裏是它的組件屬性的子列表。」也許我低估了標準JMX有多大? – Matthew

+0

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/management/package-frame.html實際上似乎有很大幫助。其他MX豆有類似的東西嗎?對不起,如果這些問題比他們應該更模糊,我不完全確定JMX的語義。 – Matthew

0

退房MC4JJConcole - 這是微不足道的兩個'他們。

+0

我試圖使用jconsole,但它在CLI上不起作用(至少在您嘗試運行時會出現一堆錯誤)。 – Matthew

+0

什麼樣的錯誤? – helios

+0

它的一堆java異常聲明沒有找到x-server。大多數jconsole文檔指出需要使用GUI。無法連接到服務器atm以獲得更好的解釋,我會在稍後發佈例外。 – Matthew

0

從系統管理員的角度來看,我完全理解這個問題的基礎。標準的JMX文檔或試圖瀏覽JMX對象樹時可能遇到的對象可能會令人難以置信和令人困惑。

我發現這個Op5 KB article在爲JBoss感興趣的JMX對象提供一個體面的概述方面非常有用。

顯然,需要調整以適應他們實際使用的監控系統,但示例中足夠使用基於nagios的監控系統。

17

您可以使用

Set mbeans = mBeanServer.queryNames(null, null); 
for (Object mbean : mbeans) 
{ 
    WriteAttributes(mBeanServer, (ObjectName)mbean); 
} 

private void WriteAttributes(final MBeanServer mBeanServer, final ObjectName http) 
     throws InstanceNotFoundException, IntrospectionException, ReflectionException 
{ 
    MBeanInfo info = mBeanServer.getMBeanInfo(http); 
    MBeanAttributeInfo[] attrInfo = info.getAttributes(); 

    System.out.println("Attributes for object: " + http +":\n"); 
    for (MBeanAttributeInfo attr : attrInfo) 
    { 
     System.out.println(" " + attr.getName() + "\n"); 
    } 
} 

這將寫入所有對象名稱及其屬性...

+0

謝謝!這非常有用! – Neoryder