Développement d'une application de surveillance personnalisée à l'aide de l'interface JMX

Vous pouvez utiliser l'API AdminClient pour extraire des données PMI (Performance Monitoring Infrastructure) à l'aide de PerfMBean ou de MBeans individuels.

Avant de commencer

Vous pouvez appeler des méthodes sur MBeans par le biais de l'interface AdminClient Java™ Management Extension (JMX). Vous pouvez utiliser l'API AdminClient pour extraire des données PMI (Performance Monitoring Infrastructure) à l'aide de PerfMBean ou de MBeans individuels. Consultez les informations relatives à l'utilisation de MBeans individuels dans cet article.

Les MBeans individuels fournissent l'attribut Stats à l'aide duquel vous pouvez extraire les données PMI. PerfMBean fournit des méthodes étendues pour l'administration PMI et des modes d'accès aux données PMI plus performants. Pour définir le niveau d'instrumentation du module PMI, vous devez appeler les méthodes dans PerfMBean. Pour demander des données PMI à partir de plusieurs MBeans, il est plus efficace d'appeler la méthode getStatsArray dans PerfMBean que d'extraire l'attribut Stats à partir de plusieurs MBeans individuels. PerfMBean peut fournir des données PMI à partir de plusieurs MBeans à l'aide d'un seul appel JMX, mais plusieurs appels JMX doivent être effectués par le biais de MBeans individuels.

Pour plus d'informations sur AdminClient JMX, reportez-vous à la rubrique "Développement d'un programme client d'administration".

Pourquoi et quand exécuter cette tâche

Après activation du service de contrôle des performances et démarrage ou redémarrage du serveur d'applications, un PerfMBean figure dans chaque serveur d'applications qui donne accès aux données PMI. Pour utiliser PerfMBean, procédez comme suit :

Procédure

  1. Créez une instance de AdminClient. Avant d'utiliser l'API AdminClient, vous devez créer une instance d'AdminClient en transmettant le nom d'hôte, le numéro de port et le type de connecteur.
    Voici l'exemple de code :
    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. Utilisez AdminClient pour interroger les noms d'objets MBean ObjectNames. Une fois l'instance AdminClient obtenue, vous pouvez appeler queryNames pour extraire une liste de noms d'objets MBean en fonction de votre chaîne de requête. Pour extraire tous les noms d'objets, vous pouvez utiliser l'exemple de code ci-dessous. Si vous avez spécifié une chaîne de requête, vous obtenez un sous-ensemble de noms d'objets.
    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	    
    Après avoir extrait tous les noms d'objets, vous pouvez utiliser l'exemple de code suivant pour extraire tous les noms de noeuds :
    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"));
          }
    }
    Remarque : Seuls les noeuds démarrés sont renvoyés.
    Pour répertorier les serveurs exécutés sur le noeud, vous pouvez vérifier le nom et le type de noeud de tous les ObjectNames ou utiliser l'exemple de code suivant :
    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. Recherchez le nom d'objet PerfMBean pour le serveur d'applications à partir duquel vous voulez extraire des données PMI. Utilisez l'exemple de code suivant :
    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. Appelez des opérations sur PerfMBean via AdminClient. Une fois le(s) PerfMBean(s) obtenu(s) sur le serveur d'applications à partir duquel vous voulez extraire des données PMI, vous pouvez appeler les opérations suivantes sur le PerfMBean via l'API AdminClient :
    // 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
    • Pour utiliser un MBean individuel, vous devez extraire l'instance AdminClient et le nom d'objet (ObjectName) pour le MBean individuel. Vous pouvez alors simplement obtenir l'attribut Stats sur MBean.

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprf_pmijmx
Nom du fichier : tprf_pmijmx.html