
La pregunta es sobre los registros de acceso y errores, particularmente con múltiples hosts (instancias de Apache instaladas en más de un servidor) y cómo mantener los registros centralmente en un sistema de archivos de red.
¿Apache cierra cada archivo de registro después de cada escritura?
En caso afirmativo, en un servidor ocupado que aloja muchos sitios, cada uno con su propio registro, ¿parecería ser un posible cuello de botella en el rendimiento?
En caso negativo, ¿cuál es la solución cuando varios servidores escriben en una única ubicación de registro en un sistema de archivos de red?
Respuesta1
¿Apache cierra cada archivo de registro después de cada escritura?
Usa la fuente, está en: https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/loggers/mod_log_config.c?view=markup
Puedes leerlo:
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.
Ese tipo de indicios de que está abierto sólo una vez. De hecho, si observa el código, se abre temprano, en la inicialización, y luego nunca se cierra, por razones obvias de rendimiento.
En caso negativo, ¿cuál es la solución cuando varios servidores escriben en una única ubicación de registro en un sistema de archivos de red?
Absolutamente nunca hagas eso, por dos razones. Primero, no inicie sesión de forma remota de esa manera. Registre localmente (y envíe archivos de registro por separado, puede rotarlos cada hora, por ejemplo) o use los demonios apropiados, syslog
sabe de manera predeterminada cómo enviar contenido de registro por UDP (o TCP), al igual que las soluciones más nuevas. No monte un disco remoto y escriba archivos de registro en él, eso reducirá el rendimiento y creará una gran cantidad de problemas (especialmente si se refiere a remoto como en "NFS").
E incluso si es local, cada aplicación debe iniciar sesión en su propio archivo de registro, no tener varias aplicaciones iniciando sesión en el mismo archivo, esto seguramente creará todo tipo de condiciones de carrera, sobrescritura, etc. Apache en sí es una aplicación incluso si se bifurca. , pero si tenía 2 Apache ejecutándose por separado en el mismo host con configuraciones diferentes, cada uno debería iniciar sesión en sus propios archivos de registro.
O mire la función de Apache para iniciar sesión en las tuberías, pero esto también tiene desventajas.
Respuesta2
AFAIK no puede tener varios servidores web Apache escribiendo simultáneamente en el mismo archivo de registro.
Para los clústeres, puede dejar que cada nodo escriba en su propio archivo de registro y luego realizar un procesamiento posterior para fusionarlos, o dejar que Apache genere eventos syslog y enviarlos a un servidor syslog central donde puede fusionarlos en un solo archivo o utilice una solución de agregación de registros como ELK Stack, Graylog, Splunk y/u otras para enviar eventos de registro desde todos los nodos del clúster a una única base de datos de big data