Anwendungsprotokollierung mit JMX-Benachrichtigungen überwachen

Java-Entwickler können Programme erstellen, um Anwendungsserverprotokolle mithilfe von JMX-Benachrichtigungen zu erstellen.

Informationen zu diesem Vorgang

Die gängigsten Protokollnachrichtenlistener sind in Java geschrieben und stellen die Verbindung zum Deployment Manager bzw. zu einem Anwendungsserver über SOAP her. Verwenden Sie diesen Artikel, um einen Java-Client zu erstellen, der auf Protokollereignisse wartet.
Anmerkung: Dieser Artikel referenziert eine oder mehrere Protokolldateien des Anwendungsservers. Alternativ dazu wird empfohlen, den Server so zu konfigurieren, dass er die HPEL-Protokoll- und -Traceinfrastruktur (High Performance Extensible Logging) verwendet und nicht die Dateien SystemOut.log , SystemErr.log, trace.log und activity.log auf verteilten oder IBM® i-Systemen. Sie können HPEL auch in Verbindung mit Ihren nativen z/OS-Protokolleinrichtungen verwenden. Wenn Sie HPEL verwenden, können Sie mit dem Befehlszeilentool LogViewer im Verzeichnis "bin" des Serverprofils auf alle Ihre Protokoll- und Tracedaten zugreifen. Weitere Informationen zur Verwendung von HPEL finden Sie in der Dokumentation zum Einsatz von HPEL für die Fehlerbehebung in Anwendungen.
Fehler vermeiden Fehler vermeiden: Gehen Sie beim Hinzufügen von Listenern zu Servern mit hohem Protokollierungsvolumen mit Vorsicht vor, da JMX-Benachrichtigungen die Leistung Ihres Servers beeinträchtigen können.gotcha

Vorgehensweise

  1. Importieren Sie die erforderlichen Pakete. Gewöhnlich müssen Sie die folgenden Importanweisungen am Anfang Ihres Java-Programms verwenden:
    import javax.management.Notification;
    import javax.management.NotificationListener;
    import javax.management.ObjectName;
    import javax.management.InstanceNotFoundException;
    import javax.management.MalformedObjectNameException;
    
    import com.ibm.websphere.management.AdminClient;
    import com.ibm.websphere.management.AdminClientFactory;
    import com.ibm.websphere.management.exception.ConnectorException;
    Damit die Nachrichten und die von den Aufrufen in den nachfolgenden Schritten zurückgegebenen Typen verarbeitet werden können, müssen Sie außerdem die folgenden Importanweisungen verwenden.
    import java.util.Iterator;
    import java.util.Properties;
    import java.util.Set;
    import com.ibm.websphere.ras.RasMessage; 
  2. Erstellen Sie eine Java-Klasse, die die Schnittstelle "NotificationListener" implementiert.
  3. Implementieren Sie die Methode "handleNotification". Im Folgenden sehen Sie einen Beispielcode, der den Nachrichtentext in der Java-Konsole ausgibt:
    public void handleNotification(Notification notification, Object handback) {
            RasMessage rasMessage = (RasMessage)notification.getUserData() ;
            System.out.println("Localized message: " + rasMessage.getLocalizedMessage(null));
    }
  4. Stellen Sie eine Verbindung zum SOAP-Port des Servers her, dessen JMX-MBeans Sie überwachen möchten. Der folgende Code erstellt ein über SOAP verbundenes AdminClient-Objekt mit dem angegebenen Host und dem angegebenen Port:
            AdminClient adminClient = null ;
            String hostName = "someHostName";
            String soapPort = "8880";
    
            Properties connectProps = new Properties();
            connectProps.setProperty(AdminClient.CONNECTOR_TYPE, "SOAP");
            connectProps.setProperty(AdminClient.CONNECTOR_HOST, hostName);
            connectProps.setProperty(AdminClient.CONNECTOR_PORT, soapPort);
    
            try {
                adminClient = AdminClientFactory.createAdminClient(connectProps);
            } catch (ConnectorException e) {
                // Fehlerbehandlungscode
            } 
  5. Rufen Sie den Namen des MBean-Objekts für die MBean "RasLoggingService" ab. Der folgende Code ruft den Namen des RasLoggingService-MBean-Objekts ab:
            String queryString = "WebSphere:cell="+cellName+",node="+nodeName+",process="+serverName+",type=RasLoggingService,*" ;
            Set<ObjectName> objectMBeans = null;
            try {
                ObjectName queryName = new ObjectName(queryString);
                objectMBeans = (Set<ObjectName>)adminClient.queryNames(queryName, null);
                if (objectMBeans.size() > 1) {
                    // Fehlerbehandlungscode für den Fall, dass mehrere Namen zurückgegeben werden
                }
            } catch (MalformedObjectNameException e) {
                // Fehlerbehandlungscode
            } catch (ConnectorException e) {
                // Fehlerbehandlungscode
            }
    
            if (objectMBeans.isEmpty()) {
                // Fehlerbehandlungscode für den Fall, dass die MBean nicht gefunden wird
            }
    
            Iterator<ObjectName> objectNames = objectMBeans.iterator() ;
            ObjectName objectName = objectNames.next() ; 
  6. Fügen Sie den Listener für Benachrichtigungen hinzu. Dieser Beispielcode fügt einen Listener für Benachrichtigungen hinzu, wartet 60 Sekunden, während die Benachrichten verarbeitet werden, und entfernt dann den Listener für Benachrichtigungen. Ein Listener kann so lange wie nötig verbunden bleiben.
            try {
                adminClient.addNotificationListener(objectName, this, null, null);
                Thread.sleep(60 * 1000) ;
                adminClient.removeNotificationListener(objectName, this) ;
            } catch (InstanceNotFoundException e) {
                // Fehlerbehandlungscode
            } catch (ConnectorException e) {
                // Fehlerbehandlungscode
            } catch (Exception e)  {
                // Fehlerbehandlungscode
            }
  7. Fügen Sie dem Klassenpfad die erforderliche JAR-Datei hinzu. Fügen Sie dem Klassenpfad die JAR-Datei des Verwaltungsclients hinzu, um Ihren Code kompilieren und ausführen zu können. Die JAR-Datei des Verwaltungsclients befindet sich im Verzeichnis "<Installationsstammverzeichnis>/runtimes".

Ergebnisse

Sie haben ein Java-Programm erstellt, das auf Benachrichtigungen des Anwendungsservers über Protokollereignisse warten kann und entsprechende Aktionen ergreifen kann.

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=ttrb_HPELNotification
Dateiname:ttrb_HPELNotification.html