Monitorando a Criação de Log de Aplicativo Usando Notificações JMX

Os desenvolvedores Java podem criar programas para monitorar logs do servidor de aplicativos usando notificações JMX.

Sobre Esta Tarefa

Os listener de mensagens de log mais comuns são gravados em Java e conectam-se ao gerenciador de implementação ou a um servidor de aplicativos usando SOAP. Use este tópico para construir um cliente Java que atenda aos eventos de log.
Nota: Esse tópico faz referência a um ou mais arquivos de log do servidor de aplicativos. Como uma recomendação alternativa, é possível configurar o servidor para usar a infraestrutura de log e rastreio do High Performance Extensible Logging (HPEL) em vez de usar os arquivos SystemOut.log , SystemErr.log, trace.log e activity.log em sistemas distribuídos e IBM® i. Também é possível usar HPEL em conjunção com os recursos de criação de log z/OS nativos. Se você estiver usando HPEL, será possível acessar todas as informações de log e rastreio usando a ferramenta de linha de comandos LogViewer a partir do diretório bin do perfil do servidor. Consulte as informações sobre a utilização do HPEL para resolução de problemas dos aplicativos para obter mais informações sobre o uso do HPEL.
Evitar Problemas Evitar Problemas: Tome cuidado ao incluir listeners em servidores com alto volume de log uma vez que as notificações JMX podem tornar seu servidor mais lento. gotcha

Procedimento

  1. Importe os pacotes necessários. Geralmente, você precisará das seguintes instruções de importação no início de seu programa Java:
    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;
    Além disso, para manipular as mensagens e os tipos retornados das chamadas em etapas subsequentes, você precisará das seguintes instruções de importação.
    import java.util.Iterator;
    import java.util.Properties;
    import java.util.Set;
    import com.ibm.websphere.ras.RasMessage; 
  2. Crie uma classe Java que implemente a interface NotificationListener.
  3. Implemente o método handleNotification. O exemplo a seguir é uma amostra que grava o texto da mensagem no console Java:
    public void handleNotification(Notification notification, Object handback) {
            RasMessage rasMessage = (RasMessage)notification.getUserData() ;
            System.out.println("Localized message: " + rasMessage.getLocalizedMessage(null));
    }
  4. Conecte à porta SOAP do servidor cujos JMX MBeans você deseja monitorar. O código a seguir cria um objeto AdminClient conectado ao SOAP com um host especificado e uma porta especificada:
            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) {
                // error handling code
            } 
  5. Recupere o nome do objeto MBean para o RasLoggingService MBean. O código a seguir recupera o nome do objeto RasLoggingService MBean:
            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) {
                    // error handling code to deal with the case where we get more than one name returned.
                }
            } catch (MalformedObjectNameException e) {
                // error handling code
            } catch (ConnectorException e) {
                // error handling code
            }
    
            if (objectMBeans.isEmpty()) {
                // error handling code to deal with the case where the MBean is not found
            }
    
            Iterator<ObjectName> objectNames = objectMBeans.iterator() ;
            ObjectName objectName = objectNames.next() ; 
  6. Inclua o listener de notificação. Este código de amostra inclui um listener de notificação, aguarda 60 segundos enquanto ele processa as notificações e, em seguida, remove o listener de notificação. Um listener pode ficar conectado pelo tempo que for necessário.
            try {
                adminClient.addNotificationListener(objectName, this, null, null);
                Thread.sleep(60 * 1000) ;
                adminClient.removeNotificationListener(objectName, this) ;
            } catch (InstanceNotFoundException e) {
                // error handling code
            } catch (ConnectorException e) {
                // error handling code
            } catch (Exception e) {
                // error handling code
            }
  7. Inclua o jar necessário em seu caminho de classe. Inclua o arquivo jar do cliente admin em seu caminho de classe para conseguir compilar e executar seu código. O arquivo jar do cliente admin está no diretório <install_root>/runtimes.

Resultados

Você criou um programa Java que pode atender e executar ações como resultado das notificações de eventos de log de um servidor de aplicativos.

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=ttrb_HPELNotification
Nome do arquivo: ttrb_HPELNotification.html