JMX インターフェースを使用した、独自のモニター・アプリケーションの開発
AdminClient API を使用して、PerfMBean または各 MBean を用いて Performance Monitoring Infrastructure (PMI) データを取得することができます。
始める前に
個々の MBean には、PMI データを取得するための Stats 属性があります。 PerfMBean は、PMI 管理用の拡張メソッドと、PMI データにアクセスするためのより効果的な方法を提供します。 PMI モジュールのインスツルメンテーション・レベルを設定するには、PerfMBean でメソッドを呼び出す必要があります。 複数の MBean から PMI データを照会するには、複数の個々の MBean から Stats 属性を取得するよりも、PerfMBean で getStatsArray メソッドを呼び出す方が高速です。Perf MBean は、単一の JMX 呼び出しを使用して複数の MBeans から PMI データを提供することができますが、複数の JMX 呼び出しは、個々の MBean を介して作成する必要があります。
AdminClient JMX について詳しくは、トピック『管理クライアント・プログラムの開発』を参照してください。
このタスクについて
手順
- AdminClient のインスタンスを作成します。 AdminClient API を使用する場合は、最初にホスト名、ポート番号、コネクター・タイプを渡して、AdminClient のインスタンスを作成する必要があります。
サンプル・コードは以下のとおりです。
AdminClient ac = null; java.util.Properties props = new java.util.Properties(); props.put(AdminClient.CONNECTOR_TYPE, connector); props.put(AdminClient.CONNECTOR_HOST, host); props.put(AdminClient.CONNECTOR_PORT, port); try { ac = AdminClientFactory.createAdminClient(props); } catch(Exception ex) { failed = true; new AdminException(ex).printStackTrace(); System.out.println("getAdminClient: exception"); }
- AdminClient を使用して、MBean ObjectName を照会します。 AdminClient のインスタンスを取得したら、queryNames を呼び出して照会ストリングに応じた MBean ObjectName のリストを取得します。すべての ObjectName を取得する場合は、以下のサンプル・コードを使用できます。照会ストリングを指定した場合は、ObjectName のサブセットを取得します。
すべての ObjectName を取得した後は、以下のサンプル・コードを使用してすべてのノード名を取得できます。javax.management.ObjectName on = new javax.management.ObjectName("WebSphere:*"); Set objectNameSet= ac.queryNames(on, null); // Check properties like type, name, and process to find a specified ObjectName
HashSet nodeSet = new HashSet(); for(Iterator i = objectNameSet.iterator(); i.hasNext(); on = (ObjectName)i.next()) { String type = on.getKeyProperty("type"); if(type != null && type.equals("Server")) { nodeSet.add(servers[i].getKeyProperty("node")); } }
注: これは、始動済みのノードだけを戻します。ノードで稼働しているサーバーをリストするには、 すべての ObjectName のノード名とタイプを検査するか、 以下のサンプル・コードを使用してください。StringBuffer oNameQuery= new StringBuffer(41); oNameQuery.append("WebSphere:*"); oNameQuery.append(",type=").append("Server"); oNameQuery.append(",node=").append(mynode); oSet= ac.queryNames(new ObjectName(oNameQuery.toString()), null); Iterator i = objectNameSet.iterator (); while (i.hasNext ()) { on=(objectName) i.next(); String process= on[i].getKeyProperty("process"); serversArrayList.add(process); }
- PMI データの取得元であるアプリケーション・サーバーの PerfMBean ObjectName を取得します。 以下のサンプル・コードを使用します。
for(Iterator i = objectNameSet.iterator(); i.hasNext(); on = (ObjectName)i.next()) { // First make sure the node name and server name is what you want // Second, check if the type is Perf String type = on.getKeyProperty("type"); String node = on.getKeyProperty("node"); String process= on.getKeyProperty("process"); if (type.equals("Perf") && node.equals(mynode) && server.equals(myserver)) { perfOName = on; } }
- AdminClient を使用して PerfMBean にオペレーションを呼び出してください。 PMI データの取得元となるアプリケーション・サーバーの PerfMBean を取得したら、
AdminClient API を通じて PerfMBean で以下のオペレーションを呼び出すことができます。
// setStatisticSet: Enable PMI data using the pre-defined statistic sets. Object[] params = new Object[] { com.ibm.websphere.pmi.stat.StatConstants.STATISTIC_SET_EXTENDED}; String[] signature = new String[] {"java.lang.String"}; ac.invoke (perfOName, "setStatisticSet", params, signature); // getStatisticSet: Returns the current statistic set. String setname = (String) ac.invoke (perfOName, "getStatisticSet", null, null); // setCustomSetString: Customizing PMI data that is enabled using fine-grained control. // This method allows to enable or disable statistics selectively. The format of the custom // set specification string is STATS_NAME=ID1,ID2,ID3 seperated by ':', where STATS_NAME //and IDs are defined in WS*Stat interfaces in com.ibm.websphere.pmi.stat package. params[0] = new String (WSJVMStats.NAME + "=" + WSJVMStats.HeapSize); params[1] = new Boolean (false); signature = new String[] {"java.lang.String", "java.lang.Boolean"}; ac.invoke (perfOName, "setCustomSetString", params, signature); // Note: Statistics that are not listed in the set string are not changed. // getCustomSetString: Returns the current custom set specification as a string String setstring = (String) ac.invoke (perfOName, "getCustomSetString", null, null); // setInstrumentationLevel: set the instrumentation level params[0] = new MBeanLevelSpec(objectName, new int[]{WSJVMStats.HEAPSIZE}); params[1] = new Boolean(true); signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanLevelSpec", "java.lang.Boolean"}; ac.invoke(perfOName, "setInstrumentationLevel", params, signature); // getInstrumentationLevel: get the instrumentation level params[0] = objectName; params[1] = new Boolean(recursive); String[] signature = new String[] { "javax.management.ObjectName", "java.lang.Boolean"}; MBeanLevelSpec[] mlss = (MBeanLevelSpec[])ac.invoke(perfOName, "getInstrumentationLevel", params, signature); // setInstrumentationLevel: set the instrumentation level (deprecated in V6.0) params[0] = new MBeanLevelSpec(objectName, optionalSD, level); params[1] = new Boolean(true); signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanLevelSpec", "java.lang.Boolean"}; ac.invoke(perfOName, "setInstrumentationLevel", params, signature); // getInstrumentationLevel: get the instrumentation level (deprecated in V6.0) Object[] params = new Object[2]; params[0] = new MBeanStatDescriptor(objectName, optionalSD); params[1] = new Boolean(recursive); String[] signature= new String[]{ "com.ibm.websphere.pmi.stat.MBeanStatDescriptor", "java.lang.Boolean"}; MBeanLevelSpec[] mlss = (MBeanLevelSpec[])ac.invoke(perfOName, "getInstrumentationLevel", params, signature); // getConfigs: get PMI static config info for all the MBeans configs = (PmiModuleConfig[])ac.invoke(perfOName, "getConfigs", null, null); // getConfig: get PMI static config info for a specific MBean ObjectName[] params = {objectName}; String[] signature= { "javax.management.ObjectName" }; config = (PmiModuleConfig)ac.invoke(perfOName, "getConfig", params, signature); // getStatsObject: you can use either ObjectName or MBeanStatDescriptor Object[] params = new Object[2]; params[0] = objectName; // either ObjectName or or MBeanStatDescriptor params[1] = new Boolean(recursive); String[] signature = new String[] { "javax.management.ObjectName", "java.lang.Boolean"}; Stats stats = (Stats)ac.invoke(perfOName, "getStatsObject", params, signature); // Note: The returned data only have dynamic information (value and time stamp). // See PmiJmxTest.java for additional code to link the configuration information with the // returned data. // getStatsArray: you can use either ObjectName or MBeanStatDescriptor ObjectName[] onames = new ObjectName[]{objectName1, objectName2}; Object[] params = new Object[]{onames, new Boolean(true)}; String[] signature = new String[]{"[Ljavax.management.ObjectName;", "java.lang.Boolean"}; Stats[] statsArray = (Stats[])ac.invoke(perfOName, "getStatsArray", params, signature); // Note: The returned data only have dynamic information (value and time stamp). // See PmiJmxTest.java for additional code to link the configuration information with the // returned data. // listStatMembers: navigate the PMI module trees Object[] params = new Object[]{mName}; String[] signature= new String[]{"javax.management.ObjectName"}; MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke(perfOName, "listStatMembers", params, signature); //or, // Object[] params = new Object[]{mbeanSD}; // String[] signature= new String[]{"com.ibm.websphere.pmi.stat.MBeanStatDescriptor"}; // MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke // (perfOName, "listStatMembers", params, signature); // Refer to the API documentation for deprecated classes
- 各 MBean の使用: AdminClient インスタンスと各 MBean 向けの ObjectName を取得する必要があります。 これにより、容易に MBean 上で Stats 属性を取得することができます。


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprf_pmijmx
ファイル名:tprf_pmijmx.html