Cronolog e log de host virtual

1

Então, há anos que uso o cronolog com esta diretiva:

<VirtualHost *:80>
  SetEnv origin SND
  ServerName sandman.net
  CustomLog "|/usr/bin/cronolog [..]/logs/SND/log_%Y-%m.txt" combined
</VirtualHost>

O problema é que, com muitos hosts virtuais, de repente eu alcanço o meu máximo de descritores de arquivos abertos quando o apache está gerando o cronolog.

Com alguns googling (e procurando aqui) eu não encontrei nenhuma solução para isso, então não há nenhum? Como você pode ver, eu configurei uma variável ENV no Apache para "SND" para esse vhost, o que eu gostaria de fazer é algo assim:

CustomLog "|/usr/bin/cronolog [..]/logs/${origin}/log_%Y-%m.txt" combined
<VirtualHost *:80>
   SetEnv origin SND
   ServerName sandman.net
</VirtualHost>

O qual, teoricamente, geraria apenas um processo de cronolog que grava no arquivo de log vhost correto.

Mas parece que o canal recomendado não é analisado por variáveis do Apache em nenhum estágio do processo, o que significa que a única solução que posso ver é que adiciono $ {origin} ao LogFormat e escrevo o meu próprio script de rotação de log que analisará (e ignorará) a variável vhost e, em seguida, gravará o restante da linha de log no arquivo apropriado. Mas isso será menos sobrecarga?

Alguma outra sugestão?

    
por Sandman 18.01.2011 / 12:17

2 respostas

1

Sempre haverá uma instância de cronolog para cada arquivo de log aberto. Uma solução é aqui: link Sugere apenas adicionar o nome do vhost ao arquivo de log e depois dividi-lo em arquivos separados, se necessário.

Outra solução possível que você sugeriu: escreva seu próprio programa / script que dividirá o registro em logs por vhost. Também pode ser uma boa idéia enviar tudo para o syslog e executar o programa de divisão no host syslog. Desta forma, o apache manterá aberto apenas um descritor de arquivo para cada tipo de log. Naturalmente, haverá alguma sobrecarga, mas o apache não ficará sem limite de descritores de arquivo.

    
por 18.01.2011 / 12:58
0

talvez você possa usar um pipe nomeado.

geralmente a sugestão de gelraen é muito boa, mas se você fizer isso você perderá a rotação (você pode chamar cronolog do syslog, mas algumas filas extras podem ser necessárias para reduzir a sobrecarga)

link (extraído do gelraen)

exceto por isso, talvez seja um bom momento para distribuir seus hosts virtuais. Mesmo se você não puder pagar uma máquina real, você pode usar um virtual. Mas não acho que ter tudo em um único servidor seja uma boa ideia.

    
por 18.01.2011 / 21:14