JMX インターフェースを使用した、独自のモニター・アプリケーションの開発

AdminClient API を使用して、PerfMBean または各 MBean を用いて Performance Monitoring Infrastructure (PMI) データを取得することができます。

始める前に

AdminClient Java™ Management Extension (JMX) インターフェースを使用して、MBeans でメソッドを呼び出すことができます。 AdminClient API を使用して、PerfMBean または各 MBean を用いて Performance Monitoring Infrastructure (PMI) データを取得することができます。 この項の後半に記載する個々の MBean の使用に関する情報を参照してください。

個々の MBean には、PMI データを取得するための Stats 属性があります。 PerfMBean は、PMI 管理用の拡張メソッドと、PMI データにアクセスするためのより効果的な方法を提供します。 PMI モジュールのインスツルメンテーション・レベルを設定するには、PerfMBean でメソッドを呼び出す必要があります。 複数の MBean から PMI データを照会するには、複数の個々の MBean から Stats 属性を取得するよりも、PerfMBean で getStatsArray メソッドを呼び出す方が高速です。Perf MBean は、単一の JMX 呼び出しを使用して複数の MBeans から PMI データを提供することができますが、複数の JMX 呼び出しは、個々の MBean を介して作成する必要があります。

AdminClient JMX について詳しくは、トピック『管理クライアント・プログラムの開発』を参照してください。

このタスクについて

パフォーマンス・モニター・サービスが使用可能で、アプリケーション・サーバーが始動または再始動されると、アプリケーション・サーバーごとに PerfMBean が配置され、PMI データへのアクセスを提供します。 PerfMBean を使用するには、以下のステップに従ってください。

手順

  1. 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");
    }
  2. AdminClient を使用して、MBean ObjectName を照会します。 AdminClient のインスタンスを取得したら、queryNames を呼び出して照会ストリングに応じた MBean 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	    
    すべての 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);
    }
  3. 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;
         }
    }
  4. 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 属性を取得することができます。

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprf_pmijmx
ファイル名:tprf_pmijmx.html