
A questão é sobre os logs de acesso e erros, principalmente com vários hosts (instâncias do Apache instaladas em mais de um servidor) e como manter os logs centralmente em um sistema de arquivos de rede.
O Apache fecha cada arquivo de log após cada gravação?
Se sim, em um servidor ocupado que hospeda muitos sites, cada um com seu próprio log, isso parece ser um potencial gargalo de desempenho?
Se não, qual é a solução quando vários servidores gravam em um único local de registro em um sistema de arquivos de rede?
Responder1
O Apache fecha cada arquivo de log após cada gravação?
Use a fonte, está em: https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/loggers/mod_log_config.c?view=markup
Você pode ler a partir dele:
251 * log_writer is NULL before the log file is opened and is
252 * set to a opaque structure (usually a fd) after it is opened.
Esse tipo de dica que ele está aberto apenas uma vez. Na verdade, se você observar o código, verá que ele é aberto antecipadamente, na inicialização, e depois nunca é fechado, por razões óbvias de desempenho.
Se não, qual é a solução quando vários servidores gravam em um único local de registro em um sistema de arquivos de rede?
Absolutamente nunca faça isso, por dois motivos. Primeiro, não faça logon remotamente dessa maneira. Faça log localmente (e envie arquivos de log separadamente, você pode alternar de hora em hora, por exemplo) ou use os daemons apropriados, syslog
sabe por padrão como enviar conteúdo de log por UDP (ou TCP), assim como soluções mais recentes. Não monte um disco remoto e grave arquivos de log nele, pois isso prejudicará o desempenho e criará muitos problemas (especialmente se você quiser dizer remoto como em "NFS").
E mesmo que localmente, cada aplicativo deva registrar em seu próprio arquivo de log, não tenha vários aplicativos registrando no mesmo arquivo, isso criará todos os tipos de condições de corrida, substituição, etc. O próprio Apache é um aplicativo, mesmo que bifurque , mas se você tivesse 2 Apaches rodando separadamente no mesmo host com configurações diferentes, cada um deles deveria registrar em seus próprios arquivos de log.
Ou veja o recurso do Apache para registrar em pipes, mas isso também tem desvantagens.
Responder2
AFAIK, você não pode ter vários servidores web Apache gravando simultaneamente no mesmo arquivo de log.
Para clusters, você permite que cada nó grave em seu próprio arquivo de log e, em seguida, faz algum pós-processamento para mesclá-los, ou permite que o Apache gere eventos syslog, envie-os para um servidor syslog central, onde você pode mesclá-los em um único arquivo ou você use uma solução de agregação de log como ELK Stack, Graylog, Splunk e/ou outros para enviar eventos de log de todos os nós do cluster para um único banco de dados de big data