Pergunta

Eu preciso de uma maneira simples de monitorar vários arquivos de log de texto distribuídos ao longo de um número de servidores HP-UX. Eles são uma mistura de texto e arquivos de log XML a partir de vários sistemas legados distribuídos. Atualmente apenas ssh aos servidores e uso tail -f e grep , mas isso não escala quando você tem muitos registros para acompanhar.

Uma vez que os registros estão em formatos diferentes e apenas arquivos em pastas (rodadas automaticamente quando atingem um determinado tamanho) Eu preciso tanto coletá-los remotamente e analisar cada um de forma diferente.

Meu pensamento inicial era fazer um processo de daemon simples 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 pode ser exportado através da rede através de uma tomada. Outro programa visualizador de execução localmente irá se conectar a esses soquetes e mostrar os logs analisadas da algumas simples com guias GUI ou agregadas a um console.

O formato de log devo tentar converter para se estou a implementá-lo dessa forma?

Existe alguma outra maneira mais fácil? Devo tentar traduzir os arquivos de log para o formato log4j para usar com Chainsaw ou há melhor log telespectadores que podem se conectar a tomadas remoto? Eu poderia usar BareTail como sugerido na outro log pergunta ? Este não é um massivly distribuídos sistema e alterar as implementações de registro atual para todas as aplicações ao uso de broadcast UDP ou mensagens colocadas em uma fila de JMS não é uma opção.

Foi útil?

Solução

Opções:

  1. Use um SocketAppender para enviar todos os logs para um servidor diretamente. (Isto poderia serverly prejudicar o desempenho e adicionar um ponto único de falha.)
  2. usar scripts para agregar os dados. Eu uso scp, ssh e chaves de autenticação para permitir que meus scripts para obter dados de todos os servidores sem quaisquer avisos de login.

Outras dicas

Provavelmente a solução mais leve de peso para log observação em tempo real é usar shell do dançarino no modo concomitante com tail -f:

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

Nós usamos um script shell simples como a abaixo. Você teria, obviamente, tem que ajustá-lo um pouco para dizer-lhe sobre os diferentes nomes de arquivos e decidir qual caixa de olhar para o qual, mas você começa a idéia básica. No nosso caso, estamos seguindo um arquivo no mesmo local em várias caixas. Isso requer autenticação ssh via 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

No que diz respeito o comentário de Mike Funk sobre não ser capaz de matar o rejeito com ^ C, eu armazenar o acima em um arquivo chamado multitails.sh e anexada a seguir ao final da mesma. Isso cria um arquivo kill_multitails.sh qual você executa quando você estiver pronto tailing, e depois ele apaga-se.

# 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

Logscape - como Splunk sem o preço

multitail ou

" chip de é uma ferramenta de análise e monitoramento local e login remoto para administradores e desenvolvedores do sistema.
Ela envolve as características de amostra, o T, cauda, ??grep, ccze, e-mail em um só, com alguns extras "

Por exemplo.

Chip -f -m0 = 'RUN' -s0 = 'vermelho' -m1 = -s1 user1 @ remote_ip1 '*.': '/ Var / log / log1 / var / log / log2 / var / log / log3 user2 @ remote_ip2: '/ var / log / log1 / var / log / log2 / var / log / log3’ ' | egrep "RUN | ==> /"

Este destaque vontade em vermelho as ocorrências do padrão -m0, pré-filtragem do 'RUN | ==> /'. padrão de todos os arquivos de log

Eu escrevi vsConsole exatamente para este fim - fácil acesso a arquivos de log - e depois acrescentou monitoramento aplicativo e acompanhamento de versões. Gostaria de saber o que você pensa dele. http://vs-console.appspot.com/

Awstats fornece um script Perl que pode mesclar vários arquivos de log apache juntos. Este script escalas bem desde o consumo de memória é muito baixa, arquivos de log nunca são carregados na memória. Eu sei que si não é exatamente o que você precisa, mas talvez você pode começar a partir deste roteiro e adaptá-lo para as suas necessidades.

Você pode usar os vários receptores disponíveis com Chainsaw (VFSLogFilePatternReceiver a arquivos cauda sobre ssh, SocketReceiver, UDPReceiver, CustomSQLDBReceiver, etc) e, em seguida, agregar os registros em uma única guia, alterando o identificador de guia padrão ou criar uma 'expressão logpanel personalizado 'fornecendo uma expressão que combina os eventos nas várias guias de origem.

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

XpoLog para Java

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top