Uma alternativa para / usr / bin / logger para obter logs do Apache para o syslog-ng

5

Atualmente, usamos o registrador para obter nossos logs de acesso do Apache para o syslog-ng com uma linha como esta em cada vhost:

CustomLog "|/usr/bin/logger -p local1.info  -t www_main" combined

Parece que quase todos os tutoriais ou conselhos que posso encontrar sobre o Apache e o syslog-ng usam esse método para obter os logs no syslog-ng. ( Exemplo ). O resto usa pipes nomeados e a fonte pipe (). ( Exemplo ).

O problema é que o registrador divide qualquer linha com mais de 1024 bytes e as envia como entradas de registro separadas, o que significa que algumas entradas de registro terminam em linhas separadas no arquivo de registro de destino final na caixa de registro.

Usar um pipe nomeado e a fonte pipe () no syslog-ng resolve o problema das linhas de divisão, mas vem com seu próprio conjunto de pequenos problemas e aborrecimentos. Para citar alguns, o pipe nomeado deve ser criado antes que o Apache e o syslog-ng sejam iniciados, o syslog-ng deve ser iniciado antes do Apache ser iniciado e a marcação dos logs (que é feita acima com -t ) deve ser feita agora no arquivo de configuração syslog-ng em vez de no vhost.

Esta página sugere escrever um pequeno script em Perl para use no lugar de / usr / bin / logger.

Eu queria saber se alguém sabe de alguma alternativa ao logger, de preferência escrita em uma linguagem compilada nativamente ou talvez uma versão atualizada do logger que não divide ao meio linhas longas.

Eu também estaria interessado em ouvir qualquer outra solução para o problema de linhas de log longas serem divididas, como uma maneira de combiná-las novamente usando o syslog-ng assim que elas acessarem os servidores de logs.

    
por Ladadadada 10.11.2011 / 17:41

4 respostas

3

Atualizando minha resposta depois de analisar isso mais.

Isso parece um limite com /usr/bin/logger , que deve estar de acordo com os RFCs do syslog. O link diz:

The total length of the packet MUST be 1024 bytes or less.

Se você enviar mais de 1024 caracteres para o syslog por meio da linha de comando (fora do Apache), você terá esse mesmo limite.

Tenha em mente que o limite de 1024 caracteres provavelmente existe em outro lugar. Eu acho que o tamanho máximo para um HTTP GET é de 1024 caracteres, e parece que me lembro que algumas rotinas de biblioteca printf têm um limite de 1024 caracteres (há um alerta de segurança há alguns anos sobre o limite de 1024 caracteres em relação a alguns syslog / string utilitários de impressão, se bem me lembro). Então, parece que suas opções são:

3) Tente impedir que seus aplicativos HTTP gravem longas mensagens de log. Isso é mais fácil dizer então feito. 1) Recompile logger e aumente este limite. Se fizer isso, lembre-se de que você está alterando um utilitário principal e isso pode resultar em um comportamento inesperado. Para atenuar isso, coloque este utilitário em / usr / local / bin ou / opt / bin. Não substitua /usr/bin/logger . 2) Não envie do Apache para o syslog. Algo como o seguinte deve funcionar em torno do limite de 1024 caracteres, já que isso não usa syslog.

CustomLog logs/access_log

4) link usa sys::syslog e parece para ser uma alternativa razoável para /usr/bin/logger . Você precisa verificar sys :: syslog para esse mesmo limite de 1024 caracteres. É Perl e deve ser fácil de anular.

Resposta antiga:

Parece que esse limite pode ser ajustado no syslog-ng, de acordo com o link

syslog defaults to 1024 byte long messages, but this value is tunable in syslog-ng 1.5 where you can set it to a higher value.

options { log_msg_size(8192); };

    
por 10.11.2011 / 18:14
2

Versões recentes de util-linux fornecem logger capaz de receber o parâmetro --size :

--size size
    Sets the maximum permitted message size to size.
    The default is 1KiB characters, which is the limit traditionally used
    and specified in RFC 3164. With RFC 5424, this limit has become flexible.
    A good assumption is that RFC 5424 receivers can at least process 4KiB messages.

    Most receivers accept messages larger than 1KiB over any type of syslog protocol.
    As such, the --size option affects logger in all cases (not only when --rfc5424
    was used).

O protocolo RFC 5424 tem sido o padrão para o logger desde a versão 2.26.

    
por 23.06.2017 / 07:37
1

Eu pessoalmente escolho os produtos gratuitos da InterSect Alliance para isso. Eles têm um produto Apache dedicado - embora antigo - e um produto mais geral que pode sugar qualquer registro baseado em texto para o formato syslog.

link

    
por 10.11.2011 / 17:59
1

Encontrei isso recentemente com um cliente que precisava de logs do Apache muito longos (o que não é problema, mesmo com versões antigas de daemons de syslog modernos como o rsyslog.)

Para lidar com isso, criei logger clones em algumas linguagens de script sem nenhuma restrição de tamanho de mensagem herdada. Veja:

GitHub: ryran / loggerclones - O comando nix logger reimplementado em linguagens de script portáteis

    
por 12.04.2016 / 20:40