Mit der JMX-Schnittstelle eigene Überwachungsanwendungen entwickeln

Mit der AdminClient-API können Sie PMI-Daten (Performance Monitoring Infrastructure) unter Verwendung der PerfMBean oder einzelner MBeans abrufen.

Vorbereitende Schritte

Sie können über die JMX-Schnittstelle AdminClient Methoden für MBeans aufrufen. Mit der AdminClient-API können Sie PMI-Daten (Performance Monitoring Infrastructure) unter Verwendung der PerfMBean oder einzelner MBeans abrufen. Weitere Informationen zur Verwendung einzelner MBeans finden Sie weiter unten in diesem Artikel.

Einzelne MBeans stellen das Stats-Attribut bereit, aus dem Sie PMI-Daten abrufen können. Die PerfMBean bietet erweiterte Methoden für die PMI-Administration an und ermöglicht einen effizienteren Zugriff auf PMI-Daten. Wenn Sie die Instrumentierungsstufe des PMI-Moduls festlegen möchten, müssen Sie Methoden der PerfMBean aufrufen. Der schnellere Weg für das Anfordern von PMI-Daten aus mehreren MBeans ist der Aufruf der Methode getStatsArray in der PerfMBean und das anschließende Abrufen des Stats-Attributs mehrerer einzelner MBeans. Die MBean Perf kann mit einem einzigen JMX-Aufruf PMI-Daten aus mehreren MBeans bereitstellen. Für die einzelnen MBeans müssen jedoch mehrere JMX-Aufrufe durchgeführt werden.

Weitere Informationen zu AdminClient JMX finden Sie im Abschnitt "Verwaltungsclientprogramm entwickeln".

Informationen zu diesem Vorgang

Nach dem Aktivieren des Performance Monitoring Service und dem Starten bzw. erneuten Starten des Anwendungsservers enthält jeder Anwendungsserver eine PerfMBean, die den Zugriff auf PMI-Daten ermöglicht. Verwenden Sie die PerfMBean wie folgt:

Vorgehensweise

  1. Eine Instanz von AdminClient erstellen. Wenn Sie die AdminClient-API verwenden, müssen Sie zunächst eine Instanz von AdminClient erstellen, indem Sie den Hostnamen, die Portnummer und einen Connectortyp übergeben.
    Der Beispielcode sieht wie folgt aus:
    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: Ausnahme");
    }
  2. AdminClient verwenden, um die Objektnamen der MBean abzufragen. Sobald Sie die AdminClient-Instanz empfangen haben, können Sie queryNames aufrufen, um - je nach Abfragezeichenfolge - eine Liste von MBean-Objektnamen zu erhalten. Zum Abrufen aller Objektnamen können Sie den folgenden Beispielcode verwenden. Wenn Sie eine Abfragezeichenfolge angegeben haben, erhalten Sie eine Untergruppe von Objektnamen.
    javax.management.ObjectName on = new javax.management.ObjectName("WebSphere:*");
         Set objectNameSet= ac.queryNames(on, null);
    	// Eigenschaften wie Typ, Name und Prozess überprüfen, um einen angegebenen Objektnamen zu finden    
    Nachdem Sie alle Objektnamen abgerufen haben, können Sie mit dem folgenden Beispielcode alle Knotennamen abrufen:
    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"));
          }
    }
    Anmerkung: Es werden nur Knoten zurückgegeben, die gestartet wurden.
    Zum Auflisten der auf dem Knoten ausgeführten Server können Sie für alle Objektnamen den Knotennamen und -typ überprüfen oder den folgenden Beispielcode verwenden:
    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. PerfMBean-Objektnamen für den Anwendungsserver abrufen, von dem PMI-Daten angefordert werden sollen. Verwenden Sie diesen Beispielcode:
    for(Iterator i = objectNameSet.iterator(); i.hasNext(); on = (ObjectName)i.next()) {
    	    	    //Zunächst muss überprüft werden, ob Knoten und Server die gewünschten Namen haben.
    	    	    //Überprüfen, ob der Typ Perf ist
         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. Mit AdminClient Operationen für PerfMBean aufrufen. Sobald Sie die PerfMBean(s) des Anwendungsservers, von dem Sie PMI-Daten anfordern möchten, erhalten haben, können Sie mit der AdminClient-API die folgenden Operationen für PerfMBean aufrufen:
    // setStatisticSet: PMI-Daten mit den vordefinierten Statistiksätzen aktivieren.
    		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: Gibt den aktuellen Statistiksatz zurück.
    		String setname = (String) ac.invoke (perfOName, "getStatisticSet", null, null);
    
    // setCustomSetString: PMI-Daten anpassen, die mit differenzierter Steuerung aktiviert wurden.
    // Mit dieser Methode können Statistiken selektiv aktiviert bzw. inaktiviert werden. Das Format der
    // angepassten Spezifikationszeichenfolge ist STATS_NAME=ID1,ID2,ID3,
    // getrennt durch einen Doppelpunkt (':'). STATS_NAME und IDs sind in den WS*Stat-Schnittstellen
    // des Pakets com.ibm.websphere.pmi.stat definiert.
    		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);
    
    // Anmerkung: In der set-Zeichenfolge nicht aufgelistete Statistiken werden nicht geändert.
     
    // getCustomSetString: Gibt die aktuelle angepasste set-Spezifikation als Zeichenfolge zurück
    		String setstring = (String) ac.invoke (perfOName, "getCustomSetString", null, null);
    
    // setInstrumentationLevel: Instrumentierungsebene festlegen
      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: Instrumentierungsebene abrufen
      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: Instrumentierungsebene festlegen (wird ab Version 6.0 nicht weiter unterstützt)
      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: Instrumentierungsebene abrufen (wird ab Version 6.0 nicht weiter unterstützt)
      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: Statische PMI-Konfigurationsdaten für alle MBeans abrufen
      configs = (PmiModuleConfig[])ac.invoke(perfOName, "getConfigs", null, null);
    
    // getConfig: Statische PMI-Konfigurationsdaten für eine bestimmte MBean abrufen
    	 	    ObjectName[] params = {objectName};
    	 	    String[] signature= { "javax.management.ObjectName" };
      config = (PmiModuleConfig)ac.invoke(perfOName, "getConfig", params, signature);
    
    
    // getStatsObject: Sie können ObjectName oder MBeanStatDescriptor verwenden
      Object[] params    = new Object[2];
      params[0] = objectName;  //ObjectName oder 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);
    
    
                
    //  Anmerkung: Die zurückgegebenen Daten enthalten nur dynamische Informationen (Wert und Zeitmarke).
    //  Weiteren Code für die Verbindung von Konfigurationsdaten und zurückgegebenen Daten finden Sie
    //  in der Datei PmiJmxTest.java.
    
    // getStatsArray: Sie können ObjectName oder MBeanStatDescriptor verwenden
      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);
    
      
    //  Anmerkung: Die zurückgegebenen Daten enthalten nur dynamische Informationen (Wert und Zeitmarke).
    //  Weiteren Code für die Verbindung von Konfigurationsdaten und zurückgegebenen Daten finden Sie
    //  in der Datei PmiJmxTest.java.
    
    // listStatMembers: Navigieren durch die Baumstruktur der PMI-Module
      Object[] params = new Object[]{mName};
      String[] signature= new String[]{"javax.management.ObjectName"};
      MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke(perfOName, "listStatMembers", params, signature);
    
    // oder
    //   Object[] params = new Object[]{mbeanSD};
    //   String[] signature= new String[]{"com.ibm.websphere.pmi.stat.MBeanStatDescriptor"};
    //         MBeanStatDescriptor[] msds = (MBeanStatDescriptor[])ac.invoke
    //         (perfOName, "listStatMembers", params, signature);
    
    // Informationen zu veralteten Klassen finden Sie in der API-Dokumentation.
    • Wenn Sie eine bestimmte MBean verwenden möchten, gehen Sie wie folgt vor: Sie müssen die AdminClient-Instanz und den Objektnamen für die spezifische MBean abrufen. Anschließend können Sie einfach das Stats-Attribut für die MBean anfordern.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprf_pmijmx
Dateiname:tprf_pmijmx.html