Dev (Back & Front)ARTIGO

Log-alize Java: Monitoramento do Java Application Logs

Ao monitorar, é importante não só avaliar o estado atual do aplicativo, mas também prever futuras situações de erros em potencial.

Tem-se falado muito sobre isso, por isso agora é natural e amplamente conhecido que qualquer aplicativo, especialmente um que está em produção, deve ser monitorado. Ao monitorar, é importante não só avaliar o estado atual do aplicativo, mas, ainda mais importante, prever futuras situações de erros em potencial. Já é uma prática comum os programas de aplicativos gravarem arquivos de log. Estes, por sua vez, geralmente contêm diversas informações de vários pontos do aplicativo. Por isso, é muito importante processar os arquivos de log de um modo que forneça uma compreensão do que está acontecendo quando as coisas dão errado.

Infelizmente, como era de se esperar, os arquivos geralmente estão longe do ideal projetado e muitas vezes contêm muitos detalhes e muito ruído. Como resultado, é, na verdade, muito difícil recolher muitas informações úteis a partir deles. Diante de tal situação, muitas vezes você pode preferir apenas selecionar partes de informações importantes de seus logs e vê-las em tempo real. Neste artigo, vamos apresentar uma solução simples, mas eficaz para o monitoramento seletivo de seus logs de aplicativo em Java, em tempo real.

Você pode se perguntar – por que Java? A resposta é simples – porque ele possui um mecanismo poderoso de registro chamado Log4J. Além disso, o mecanismo Log4J foi portado para outras linguagens de programação mais populares (log4php, log4net, log4cxx, log4js etc.), então talvez essa mesma abordagem possa ser usada com elas também.

O Log4j fornece muitas extensões, e uma delas prevê a criação de appenders personalizados. Ele também possui uma instalação de filtragem que pode ser usada em appenders personalizados. Dessa forma, a ideia é criar um appender personalizado com filtragem seletiva vai obter informações de seu arquivo de log e enviar essa informação para Monitis. Lá, ele pode ser mostrado na forma de tabela e gráfico, a fim de notificar o usuário se alguma coisa está começando a dar errado.

Criamos o appender genérico personalizado com filtragem que recebe informações do Log4J, filtra de acordo com um padrão do usuário (RegExp) e, em seguida, enviamos para Monitis usando a API Monitis Open. O appender personalizado é encapsulado por um arquivo Jar e, portanto, você não deve fazer nenhuma alteração no seu aplicativo. Você pode usá-lo da maneira como ele está, sem o menor problema.

Tudo o que precisa ser feito é o seguinte:

  • Incluir o log_mon.jar (appender personalizado genérico) na sua lista de bibliotecas de aplicativos
  • Usar as configurações abaixo como exemplo, modificar o arquivo de configuração do Log4J para especificar as definições para o Monitis Appender
<appender name="monitisAppender">

<param name="monitisApiKey" value="2PE0HVI4DHP34JACKCAE37IOD4" />

<param name="monitisSecretKey" value="7OI90FU3C3DA8ENLNJ0JGGOGO0" />

<param name="monitisMonitorName" value="Log_files_monitor" />

<param name="monitisMonitorTag" value="Custom_logger_monitor" />

<param name="monitisSendInterval" value="60000" />

<layout>

<param name="ConversionPattern" value="%d{ISO8601} %-5p [%t]: %m%n" />

</layout>

<filter>

<param name="filterPattern" value="(Error|Fatal|Warn*|Attention)" />

<param name="minAllowedLevel" value="WARN" />

</filter>

</appender>

onde:

  • monitisApiKey é a APIKey pessoal do usuário que pode ser obtido a partir da conta de usuário Monitis
  • monitisSecretKey é a secret key pessoal do usuário que pode ser obtida a partir da conta de usuário Monitis
  • monitisMonitorName é o nome de usuário (qualquer nome exclusivo pode ser escolhido)
  • monitisMonitorTag é o valor da tag para do usuário
  • monitisSendInterval é o intervalo de tempo [ms] entre o envio de informação monitorada para Monitis
  • ConversationPattern é o padrão que vai ser utilizado por MonitisAppender para formato de gravação
  • filterPattern é um padrão de string para seleção de registros de log que você deseja monitorar

Isso deve ser composto como um Java RegEx e corresponde às exigências do Java Pattern.matches.

(o default é sem padrão – assim todos os registros serão enviados ao Log Monitor)

  • minAllowedLevel é o nível de registros log4j (ERROR, WARN, DEBUG etc.) que você deseja monitorar (o valor padrão é o WARN)

Notas:

  • a configuração do Log4J deve ser preparada em formato XML, pois o filtro Log4J suporta apenas XML
  • esta abordagem não afeta o desempenho do aplicativo pois os appenders Log4J trabalham em threads separadas de forma assíncrona
  • é possível usar mais memória para executar o seu aplicativo, porque um appender personalizado adicional funciona nos mesmos limites JVM
  • em comparação com outras abordagens, esta parece muito mais simples e não requer ferramentas adicionais. Está muito perto da técnica The Cure for Monitoring Java Logs e o simplifica.

As fontes e mais detalhes podem ser encontrados no GitHub.

Texto original da equipe Monitis, liderada por Hovhannes Avoyan, disponível em http://blog.monitis.com/index.php/2012/08/17/log-alize-java-monitoring-java-application-logs/

 

 

é CEO do Monitis, um provedor de gerenciamento de sistemas e de monitoramento de software on-demand.

Ver perfil