Como monitorar vários arquivos de log com o MultiTail

O aplicativo MultiTail permite ver vários arquivos de log em seu sistema, com a criação de divisórias (uma para cada log) dentro da janela de um único console, com o uso da biblioteca ncurses.
Pode-se dizer que seja uma versão melhorada do utilitário Tail.
Desenvolvido por Folkert Vanheusden, o aplicativo é multiplataforma, com suporte a UNIX, GNU/Linux, Mac OS X e Windows (através do Cygwin).
Multitail logo and woman
Entre seus recursos, citam-se:

  • Monitoramento de wildcards — caso um arquivo, que preencha requisitos preestabelecidos, tenha data ou hora de modificação mais atual, o programa prioriza seu monitoramento.
  • Junção de duas ou mais fontes de entrada de dados.
  • Por meio de expressões regulares, exibe resultados em cores na tela — o que ajuda a distinguir informações importantes.
  • Filtro de linhas.
  • Menus interativos para editar expressões regulares e para remover ou adicionar janelas.
  • Permite usar a saída produzida por outros aplicativos ou shell scripts.
  • Imita as funcionalidades de ferramentas como o watch, quando analisa a saída de algum software externo.

Nos tópicos que seguem, pretendo abordar vários aspectos do MultiTail, o que inclui técnicas de instalação, o uso básico e alguns exemplos comuns em que ele pode ser aplicado para monitorar o seu sistema.

Sinta-se à vontade para ir direto ao ponto que te interessa ou guardar o texto no menu favoritos, para usar como referência em outro momento.

Ao iniciar o Multitail (sem qualquer parâmetro), o aplicativo limpa a tela e exibe algumas teclas de atalho que você pode usar, ao lado de uma curta explicação sobre o que cada uma delas faz.
Tecle ‘F1’ ou ‘Ctrl + h’ para obter mais ajuda, dentro do aplicativo. Para finalizá-lo, tecle ‘q’, ‘x’ ou ‘Ctrl +C’.

Como instalar o MultiTail

Neste artigo, abordamos o uso do MultiTail em um sistema GNU/Linux Ubuntu 14.04 LTS. Como em qualquer outro sistema baseado no Debian, o aplicativo pode ser instalado via apt-get:

sudo apt-get install multitail

Se você usa outro sistema operacional, use o utilitário de instalação que se aplica a sua situação.

Como baixar e compilar a última versão do MultiTail

Há várias razões para querer compilar o código fonte de um aplicativo — ter em mãos uma versão mais nova e mais eficiente, são duas delas.
Se você tiver interesse em saber mais sobre como compilar seus programas no Linux, leia o artigo Como compilar código fonte.


No Ubuntu 14.04, o MultiTail está disponível na versão 6.0:

multitail -V
 --*- multitail 6.0 (C) 2003-2013 by folkert@vanheusden.com -*--

Thank you for using MultiTail.
...

Se você está satisfeito com a versão que tem no seu sistema, pule esta seção.
Se preferir tentar baixar e compilar o código fonte, pode se surpreender com a facilidade do processo, descrito a seguir.
Tenha o cuidado de remover a versão antiga, caso a tenha instalado, antes de trazer a nova — isto evita confusão.
A partir do site oficial é possível baixar uma versão mais nova (link ao final do texto):

wget http://www.vanheusden.com/multitail/multitail-6.4.1.tgz

Depois de baixar, descompacte o código, entre no diretório de instalação e compile:

tar xvvzf multitail-6.4.1.tgz
cd multitail-6.4.1/
sudo apt-get install libncursesw5-dev
sudo make install

Feito isto, o novo aplicativo já estará instalado e pronto para ser executado:

multitail

Como usar o MultiTail

multitail-apache-logs-access-error-Screenshot
O aplicativo tem um grande número de opções — todas documentadas no manual UNIX/Linux ou no sistema de ajuda do aplicativo — tecle ‘Ctrl + h’ para chegar lá, conforme destacado na imagem abaixo:
Captura de tela da ajuda do multitail
Você pode percorrer a tela de ajuda com as teclas de direcionamento e não precisa estar com o inglês “muito em dia” para entender a maior parte do texto.
Ao iniciar o MultiTail, você terá resultados mais imediatos, se já oferecer os arquivos de log que deseja monitorar.
Na figura acima, usei os arquivos de log do Apache: access.log e error.log:

multitail /var/log/apache2/access.log -I /var/log/apache2/error.log

Neste caso, se você tiver o Apache instalado no seu sistema, ao acessar o endereço http://localhost, perceberá alteração na tela de monitoramento.
Veja algumas opções comuns de uso do MultiTail:

  • --closeidle N — permite especificar um período de inatividade de N segundos, após o qual o aplicativo fecha a janela referente ao arquivo de log ocioso.
    É útil para quando se está monitorando um grande número de arquivos, mas só quer que sejam exibidos resultados daqueles que estão verdadeiramente ativos.
    Seja cuidadoso com o uso desta opção — a janela não vai se reabrir, caso o arquivo seja atualizado depois de ter sido fechada.
  • -i file — permite declarar os nomes dos arquivos de log que se deseja acompanhar.
    Normalmente, você só precisa listar os arquivos na linha de comando, um após o outro.
    Preceder o nome de um arquivo com ‘-i’ permite monitorar aqueles cujos nomes começam com um traço (-) — caso contrário, o nome do arquivo será entendido como uma opção de linha de comando do MultiTail, o que pode acabar retornando um erro.
  • --mark-interval N — Permite que se especifique um intervalo de tempo, em N segundos, de inatividade que faz com que uma linha marcadora seja exibida na janela de resultados do MultiTail.
    Por exemplo, caso não haja atividade no log do servidor web Apache, em N segundos, o programa exibe uma linha ---auth.log DATE TIME---, em que DATE TIME é a data e hora.
    Esta opção é especialmente útil para identificar os arquivos de log que não estão tendo muita atividade.
  • --no-repeat — evita a repetição ou redundância de mensagens ao informar apenas quantas vezes a última mensagem foi repetida: “Last message repeated N times”.

Veja o exemplo abaixo:

multitail --mark-interval 10 --no-repeat /var/log/kern.log /var/log/mysql.log

Multitail monitor kernel and mysql
Como você já pôde perceber, o MultiTail divide a tela em partes iguais para cada arquivo de log. Você pode ampliar a janela do console se quiser… mas o fato é que as 2 últimas linhas já costumam ser suficientes para acompanhar e detectar se algo anormal está acontecendo.

Use o MultiTail para monitorar as saídas dos comandos

Há casos em que o conteúdo do que está sendo escrito em um arquivo de log não é tão importante — o administrador deseja apenas saber se ele está sendo atualizado, como consequência de algum aplicativo estar funcionando no sistema.
Um dos exemplos disto é log de acessos do Apache — cujo uso pode ser bastante intenso em alguns servidores.
O servidor web pode gerar milhares de mensagens de log em questão de minutos — cada qual contém detalhes que raramente são muito úteis.
Em casos como este, o que os administradores de sistemas realmente querem é verificar se o arquivo de log está sendo alimentado — ou, em outras palavras, que o servidor está no ar e recebendo acessos.
Manualmente, você pode acompanhar o crescimento do arquivo de log de acessos do servidor web com o comando ‘ls -l’:

ls -l /var/log/apache2/access.log-rw-r----- 1 root adm 21444 Ago  1 20:29 /var/log/apache2/access.log

Você acompanha os acessos através da repetição deste comando. Chato, não?
Para usar o MultiTail para acompanhar apenas as saídas de um programa, é necessário incluir algumas opções na linha de comando. Veja:

multitail -Rc 2 -l "ls -l /var/log/apache2/access.log"

Multi tail and apache


Este é um caso em que o MultiTail mimetiza outro programa: o watch.
O aplicativo watch está presente, por padrão, na maioria das distribuições Linux.
Ele também pode ser usado para resolver o problema acima, com esta linha de comando:

watch "ls -l /var/log/apache2/access.log"

Faça a experiência.

Exemplos de uso do MultiTail

Foi dito, antes, que o MultiTail “divide a janela do console em partes iguais”. Sendo um comportamento padrão do aplicativo, há opções para dividir a tela de outras maneiras mais cômodas para você acompanhar o andamento do sistema.
O exemplo abaixo mostra a divisão da tela em 3 sessões, em que o primeiro arquivo de log monitorado ocupa um espaço maior. Veja:

multitail -s 2 /var/log/apache2/error.log /var/log/apache2/access.log /var/log/gpu-manager.log

multitail -s 2 /var/log/apache2/error.log /var/log/apache2/access.log /var/log/gpu-manager.log
No segundo exemplo, mostro como integrar os logs de 2 aplicativos em apenas uma janela — cada log, contudo, terá sua própria cor.
Os logs de acessos e erros de um servidor podem ser um pouco “maçantes” e conter muita informação redundante — motivo pelo qual um administrador pode optar por deixá-los juntos em uma única janela.
A diferença de cores, permite acompanhar com clareza o andamento do log de cada um:

multitail -ci green /var/log/apache2/access.log -ci red -I /var/log/apache2/error.log

multitail -ci green /var/log/apache2/access.log -ci red -I /var/log/apache2/error.log

Referências

Site oficial do MultiTail: http://www.vanheusden.com/multitail/
Página do desenvolvedor no GitHub: https://github.com/flok99/multitail
Artigo no Wikipedia: https://en.wikipedia.org/wiki/MultiTail
Documentação do MultiTail: http://linux.die.net/man/1/multitail

Como monitorar o sistema com o tail

Arquivos de log existem para criar relatório que mostram como um sistema ou um aplicativo está se comportando.
Em sistemas UNIX ou GNU/Linux, arquivos de log são compostos de informações em texto puro e são continuamente acrescidos de novas informações.
Estas informações são fornecidas ou pelos processos em execução na máquina ou por daemons, que produzem informações de log.
Sistemas UNIX ou UNIX-like tem um daemon responsável por criar e manter o log do sistema — usualmente chamado syslogd ou, simplesmente, syslog (que manipula relatórios vindos de diferentes aplicações e servidores).
O Linux tem, ainda, um aplicativo chamado klogd — um daemon para monitorar especificamente as mensagens do kernel.

Como usar o tail

O tail é um dos comandos clássicos usados para monitorar alterações em arquivos no sistema, o que inclui arquivos de log.
Sua função é mostrar as últimas 10 linhas (um padrão que pode ser mudado) de um arquivo.
Sua sintaxe é tail nome_do_arquivo. A execução é finalizada logo após a exibição das 10 últimas linhas do arquivo.
Executado desta forma, o tail não é tão útil para realizar monitoramento algum.
Administradores de sistema – quando usam o tail –, o invocam com a opção -f — que mantém a exibição, continuamente, das últimas linhas do arquivo especificado na linha de comando.
O tail é útil para monitorar múltiplos arquivos de log simultaneamente.
Processos específicos do servidor, que você queira acompanhar, normalmente escrevem seus próprios arquivos de log, enquanto o syslog envia diferentes tipos de mensagens a diferentes tipos de arquivos de log — o que depende de como ele esteja configurado em /etc/
syslog.conf
.
Nos servidores Ubuntu, ele pode ser usado para acompanhar tanto o

  • /var/log/auth.log — onde são registradas as requisições para se autenticar no sistema,
  • quanto o

  • /var/log/kern.log — onde são registradas as mensagens do kernel.

Em servidores web Apache é interessante monitorar ambos os arquivos padrão de log do Apache — /var/log/apache2/access.log e /var/log/apache2/error.log.

tail montoramento do apache
Clique para ver detalhes

A figura acima, mostra duas telas do terminal abertas, cada qual monitora um arquivo de log do Apache.
Embora esta solução consuma uma boa parte da área da sua tela, isso não é problema para clientes com interfaces gráficas Linux, que podem jogar a atividade toda para um desktop virtual.

Exemplos de uso do tail

Se você está monitorando o log de um aplicativo que irá mostrar uma mensagem ao final, pode pedir para o tail só mostrar a mensagem indicadora de que a tarefa terminou. No exemplo, a seguir, o comando grep vai mostrar a frase Finished: SUCCESS”, mas você deve adequar esta linha de comando ao contexto que você tem aí:

tail -f meuarquivo.log | grep -qx "Finished: SUCCESS"

em que

  • -q pede para o grep para ficar em silêncio (quiet), até encontrar a string desejada
  • -x estabelece a condição de que a string buscada ocupe toda a linha

Se você prefere que o tail retorne um número diferente de 10 linhas, use a opção -n:

tail arquivo.txt -n 15

Para monitorar apenas uma determinada ocorrência use um pipe para o comando grep.
No exemplo abaixo, o tail monitorará o arquivo access.log.
Além disto, ele enviará as dez últimas linhas do arquivo e todas as novas que forem adicionadas ao utilitário grep.
O grep lê as informações que o tail envia e exibe apenas as que contiverem 192.168.1.5.

tail -f access.log | grep 192.168.1.5

Este exemplo demonstra como selecionar em tempo real o que exatamente você deseja monitorar dentro de um arquivo de log.

Alternativas ao tail

O tail é uma ferramenta clássica de monitoramento que, por padrão, inquire o arquivo a cada segundo — este comportamento pode ter um impacto significativo em equipamentos já sobrecarregados de trabalho.
Alguns administradores sugerem o uso de less, como alternativa rudimentar (mas eficaz) ao tail.
Monitoramento simultâneo de vários arquivos, pode ser feito com o multitail e com ganho de eficiência. Mas isto será alvo de um novo artigo.


Referẽncias:
http://unix.stackexchange.com/questions/45941/tail-f-until-text-is-seen.
http://www.computerhope.com/unix/utail.htm.