apache2 logging com script

1

Eu preciso analisar os logs gerados pelo servidor web Apache2. Estou pensando em canalizar o log para um script que apenas esperará no stdin por entrada ou analisar os logs todas as noites com um trabalho em lote.

Um dos meus requisitos envolve a gravação de algumas das informações em um banco de dados (ou seja, tempo de execução, tamanho, URI, IP remoto). Por essa razão, estou apreensivo quanto a canalizar para um script e manter uma conexão de banco de dados aberta. Então estou me inclinando para uma análise noturna.

Alguém usando uma configuração como essa em um ambiente de produção ou tem alguma ideia?

    
por goose 15.06.2009 / 16:54

3 respostas

2

Eu recomendo não usar um pipe porque, por solicitação, você perderá muito tempo no apache para canalizar o script e aguardará o fim do script para liberar o recurso do apache. Então, se por um motivo, seu banco de dados ficar muito lento para fazer o INSERT, você pode ter todos os threads / processos do apache esperando que o seu script termine o seu trabalho e não possa ser usado para processar novas solicitações do usuário

    
por 15.06.2009 / 17:07
1

Você poderia tentar usar o mod-log-sql para fazer login em um banco de dados em todas as solicitações. Minha preferência é para algo noturno quando você tem uma carga menor, mas depende de como você precisa dos dados.

    
por 15.06.2009 / 17:01
0

Existem várias vantagens em executar a análise de log como um trabalho noturno se você não precisar de atualização de dados em tempo real:

  • Você tem controle da carga no servidor da Web e no servidor de banco de dados causada pelo análise de log, ou seja. não é afetado por picos de tráfego. Você pode até mesmo mover seus arquivos de log para um servidor diferente para análise depois de terem sido rotacionados, se você quiser. Isto é muito útil se seu aplicativo estiver sendo executado em vários servidores da web.

  • Você pode realizar agregações nos dados antes de inseri-los no banco de dados, se precisar.

  • Vários mecanismos de banco de dados suportam algum tipo de inserção em massa que é muito mais rápida do que inserir os mesmos dados, um registro por vez.

  • O tratamento de erros (erros no seu código de análise, banco de dados indisponível etc.) é mais simples - apenas Execute novamente o mesmo script nos dados de registro relevantes após o problema ser corrigido.

Tenho certeza de que há outros, dependendo de suas necessidades e situação de hospedagem. Pessoalmente Eu nem sequer considere piping do Apache a menos que as atualizações em tempo real sejam must absolutas, e mesmo assim eu iria extrair apenas o que era necessário no script canalizado e lidar com tudo mais com um trabalho noturno.

Se você precisar de uma solução próxima ao tempo real, considere o uso de uma fila de mensagens sistema (como ActiveMQ , por exemplo), e postar mensagens na fila através do Apache tubo de log.

    
por 16.06.2009 / 07:44