Utilización de la interfaz JMX para desarrollar su propia aplicación de supervisión

Puede utilizar la API de AdminClient para obtener datos de PMI (Infraestructura de supervisión del rendimiento) utilizando PerfMBean o MBeans individuales.

Antes de empezar

Puede invocar métodos en MBeans mediante la interfaz JMX (Java™ Management Extension) de AdminClient. Puede utilizar la API de AdminClient para obtener datos de PMI (Infraestructura de supervisión del rendimiento) utilizando PerfMBean o MBeans individuales. Consulte la información sobre el uso de MBeans individuales más adelante en este mismo artículo.

Los MBeans individuales proporcionan el atributo Stats de donde puede obtener datos de PMI. El PerfMBean proporciona métodos ampliados para administración de la PMI y modos más eficaces para acceder a datos de PMI. Para establecer el nivel de instrumentación del módulo PMI, debe invocar a métodos en PerfMBean. Para consultar datos de PMI de varios MBeans, es más ágil invocar el método getStatsArray de PerfMBean que obtener el atributo Stats de varios MBeans individuales. Perf MBean puede proporcionar datos de PMI de varios MBeans mediante una única llamada a JMX, pero varias llamadas a JMX deben realizarse a través de MBeans individuales.

Consulte el tema "Desarrollo de un programa cliente de administración" para obtener más información sobre JMX del cliente de administración.

Acerca de esta tarea

Después de habilitar el servicio de supervisión del rendimiento y de iniciar o reiniciar el servidor de aplicaciones, hay un PerfMBean en cada servidor de aplicaciones para dar acceso a los datos de PMI. Para utilizar PerfMBean:

Procedimiento

  1. Cree una instancia de AdminClient. Cuando utiliza la API AdminClient, primero necesita crear una instancia de AdminClient transfiriendo el nombre de host, el número de puerto y el tipo de conector.
    El código de ejemplo es:
    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. Utilice AdminClient para consultar los ObjectNames MBean. Tras obtener una instancia de AdminClient, puede llamar a queryNames para obtener una lista de ObjectNames de MBean según cuál sea la serie de consulta. Para obtener todos los ObjectNames, puede utilizar el código de ejemplo siguiente. Si ha especificado una serie de consulta, obtendrá un subconjunto de ObjectNames.
    javax.management.ObjectName on = new javax.management.ObjectName("WebSphere:*");
         Set objectNameSet= ac.queryNames(on, null);
    	// Seleccione las propiedades como type, name y process para buscar un ObjectName	especificado 
    Después de obtener todos los ObjectNames, puede utilizar el siguiente código de ejemplo para obtener todos los nombres de nodo:
    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"));
          }
    }
    Nota: Sólo se devuelven los nodos iniciados.
    Para enumerar los servidores de un nodo, puede comprobar el nombre y el tipo de nodo de todos los ObjectNames o utilizar el código de ejemplo siguiente:
    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. Obtenga el ObjectName PerfMBean del servidor de aplicaciones de donde desea obtener los datos de PMI. Utilice este código de ejemplo:
    for(Iterator i = objectNameSet.iterator(); i.hasNext(); on = (ObjectName)i.next()) {
    	    	    // Primero asegúrese de que el nombre de nodo y el de servidor son los que desea
    	    	    // En segundo lugar, compruebe si el tipo es 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. Invoque operaciones sobre PerfMBean mediante AdminClient. Tras obtener los PerfMBeans del servidor de aplicaciones de donde desea obtener datos de PMI, puede invocar las operaciones siguientes en PerfMBean mediante la API de AdminClient:
    // setStatisticSet: habilitar datos de PMI utilizando los conjuntos de estadísticas predefinidos.
    		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: devuelve el conjunto de estadísticas actual.
    		String setname = (String) ac.invoke (perfOName, "getStatisticSet", null, null);
    
    // setCustomSetString: personalizar datos de PMI que se habilitan mediante el control preciso.
    // Este método permite habilitar o inhabilitar las estadísticas selectivamente. El formato de la serie de
    // especificación de conjunto personalizado es STATS_NAME=ID1,ID2,ID3 separado por ':', donde STATS_NAME
    //y los ID se definen en las interfaces WS*Stat del paquete com.ibm.websphere.pmi.stat.
    		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);
    
    //  Nota: las estadísticas que no se listan en la serie del conjunto no se modifican.
     
    // getCustomSetString: devuelve la especificación del conjunto personalizado actual como una serie
    		String setstring = (String) ac.invoke (perfOName, "getCustomSetString", null, null);
    
    // setInstrumentationLevel: establecer el nivel de instrumentación
      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: obtener el nivel de instrumentación
      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: establecer el nivel de instrumentación (en desuso en la 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: obtener el nivel de instrumentación (en desuso en la 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: obtener información de configuración estática de PMI para todos los MBeans
      configs = (PmiModuleConfig[])ac.invoke(perfOName, "getConfigs", null, null);
    
    // getConfig: obtener información de configuración estática de PMI para un MBean específico
    	 	    ObjectName[] params = {objectName};
    	 	    String[] signature= { "javax.management.ObjectName" };
      config = (PmiModuleConfig)ac.invoke(perfOName, "getConfig", params, signature);
    
    // getStatsObject: puede utilizar ObjectName o MBeanStatDescriptor
      Object[] params    = new Object[2];
      params[0] = objectName;  // u ObjectName o 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);
    
    //  Nota: los datos devueltos sólo tienen información dinámica (valor e indicación de fecha y hora).
    //  Consulte PmiJmxTest.java para obtener código adicional para enlazar la información de configuración
    //  con los datos devueltos.
    
    // getStatsArray: puede utilizar ObjectName o 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);
    
    //  Nota: los datos devueltos sólo tienen información dinámica (valor e indicación de fecha y hora).
    //  Consulte PmiJmxTest.java para obtener código adicional para enlazar la información de configuración
    //  con los datos devueltos.
    
    // listStatMembers: navegue por los árboles de módulos PMI
      Object[] params = new Object[]{mName};
      String[] signature= new String[]{"javax.management.ObjectName"};
      MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke(perfOName, 
    								"listStatMembers", params, signature);
    //u
    //   Object[] params = new Object[]{mbeanSD};
    //   String[] signature= new String[]{"com.ibm.websphere.pmi.stat.MBeanStatDescriptor"};
    //         MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke
    //         (perfOName, "listStatMembers", params, signature);
    
    // Consulte la documentación de la API para obtener información sobre las clases en desuso
    • Para utilizar un MBean individual: necesita obtener la instancia de AdminClient y el ObjectName del MBean individual. Ahora puede obtener simplemente el atributo Stats en el MBean.

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprf_pmijmx
File name: tprf_pmijmx.html