it-swarm-pt.tech

A melhor maneira de agregar vários arquivos de log de vários servidores

Preciso de uma maneira simples de monitorar vários arquivos de log de texto distribuídos por vários servidores HP-UX. Eles são uma mistura de arquivos de log de texto e XML de vários sistemas legados distribuídos. Atualmente, apenas enviamos ssh para os servidores e usamos tail -f e grep , mas isso não aumenta quando você tem muitos logs para acompanhar.

Como os logs estão em formatos diferentes e apenas arquivos em pastas (rotacionados automaticamente quando atingem um determinado tamanho), preciso coletá-los remotamente e analisar cada um de maneira diferente.

Meu pensamento inicial era criar um processo simples de daemon que eu possa executar em cada servidor usando um leitor de arquivo personalizado para cada tipo de arquivo para analisá-lo em um formato comum que possa ser exportado pela rede por um soquete. Outro programa visualizador em execução localmente se conectará a esses soquetes e mostrará os logs analisados ​​em uma GUI simples com guias ou agregada a um console.

Em qual formato de log devo tentar converter se devo implementá-lo dessa maneira?

Existe alguma outra maneira mais fácil? Devo tentar converter os arquivos de log no formato log4j para usar com Chainsaw ou existem melhores visualizadores de log que podem se conectar a soquetes remotos? Eu poderia usar BareTail conforme sugerido em outra pergunta de log ? Este não é um sistema distribuído massivamente e alterar as implementações de log atuais para todos os aplicativos usarem transmissão UDP ou colocarem mensagens em uma fila JMS não é uma opção.

40
Claes Mogren

Opções:

  1. Use um SocketAppender para enviar todos os logs para 1 servidor diretamente. (Isso pode prejudicar o desempenho do servidor e adicionar um único ponto de falha.)
  2. Use scripts para agregar os dados. Uso chaves de autenticação scp, ssh e autenticação para permitir que meus scripts obtenham dados de todos os servidores sem nenhum aviso de login.
2
James A. N. Stauffer

Provavelmente, a solução mais leve para observação de logs em tempo real é usar Dancerer's Shell no modo simultâneo com tail -f:

dsh -Mac -- tail -f /var/log/Apache/*.log
  • -A é para todos os nomes de máquinas que você definiu em ~/.dsh/machines.list
  • O -c é para execução simultânea da cauda
  • O -M acrescenta o nome do host a cada linha de saída.
21
mrm

Usamos um script Shell simples como o abaixo. Obviamente, você teria que ajustá-lo um pouco para falar sobre os diferentes nomes de arquivo e decidir em qual caixa procurar qual, mas você terá a idéia básica. No nosso caso, estamos seguindo um arquivo no mesmo local em várias caixas. Isso requer autenticação ssh através de chaves armazenadas em vez de digitar senhas.

#!/bin/bash
FILE=$1
for box in box1.foo.com box2.foo.com box3.foo.com box4.foo.com; do
     ssh $box tail -f $FILE &
done

Em relação ao comentário de Mike Funk sobre não ser capaz de eliminar o tailing com ^ C, armazenei o acima em um arquivo chamado multitails.sh e acrescentei o seguinte no final. Isso cria um arquivo kill_multitails.sh que você executa quando termina o processo e, em seguida, se exclui.

# create a bash script to kill off 
# all the tails when you're done
# run kill_multitails.sh when you're finished

echo '#!/bin/sh' > kill_multitails.sh
chmod 755 kill_multitails.sh
echo "$(ps -awx | grep $FILE)" > kill_multitails_ids
Perl -pi -e 's/^(\d+).*/kill -9 $1/g' kill_multitails_ids
cat kill_multitails_ids >> kill_multitails.sh
echo "echo 'running ps for it'" >> kill_multitails.sh
echo "ps -awx | grep $FILE" >> kill_multitails.sh
echo "rm kill_multitails.sh" >> kill_multitails.sh
rm kill_multitails_ids


wait
12
masukomi

Logscape - como splunk sem o preço

5
JzJ

Eu escrevi o vsConsole exatamente para esse fim - acesso fácil aos arquivos de log - e adicionei o monitoramento de aplicativos e o rastreamento de versões. Gostaria de saber o que você pensa disso. http://vs-console.appspot.com/

2
prule

multitail ou

" chip é uma ferramenta local e remota de análise e monitoramento de logs para administradores e desenvolvedores de sistemas.
Ele agrupa os recursos de amostra, tee, cauda, ​​grep, ccze e correio em um, com alguns extras "

Por exemplo.

chip -f -m0 = 'EXECUTAR' -s0 = 'vermelho' -m1 = '. *' -s1 usuário1 @ remoto_ip1: '/ var/log/log1/var/log/log2/var/log/log3 usuário2 @ remote_ip2 : '/ var/log/log1/var/log/log2/var/log/log3' '| egrep "EXECUTAR | ==> /"

Isso destacará em vermelho as ocorrências do padrão -m0, pré-filtrando o padrão 'RUN | ==> /' de todos os arquivos de log.

2
Joao Figueiredo

Você pode usar os vários receptores disponíveis com o Chainsaw (VFSLogFilePatternReceiver para arrastar arquivos por ssh, SocketReceiver, UDPReceiver, CustomSQLDBReceiver, etc) e agregar os logs em uma única guia, alterando o identificador de guia padrão ou criando um 'logon de expressão personalizado', fornecendo uma expressão que corresponde aos eventos nas várias guias de origem.

1
Scott

XpoLog para Java

1
tom

gltail - visualização em tempo real do tráfego do servidor, eventos e estatísticas com Ruby, SSH e OpenGL de vários servidores

1
Albert T. Wong

O Awstats fornece um script Perl que pode mesclar vários arquivos de log do Apache. Esse script é bem dimensionado, pois o espaço ocupado na memória é muito baixo, os arquivos de log nunca são carregados na memória. Sei que não é exatamente o que você precisa, mas talvez você possa começar com esse script e adaptá-lo às suas necessidades.

1
Alexandre Victoor