Woop!

Panel de control Plesk


Activar los "piped logs" para Apache en Plesk (ERROR: Unable to open logs)


La mayoría del software empaquetado por distribuciones como CentOS, Debian, etc.. viene compilado con un tamaño de FD_SETSIZE = 1024. La variable FD_SETSIZE limita el número de descriptores que puede abrir un proceso, es decir, los procesos solo podrán abrir un total de 1024 ficheros, a no ser que se recompile los programas cambiando este parámetro. Si queremos recompilar Apache en un servidor con panel de control Plesk, existe mas información sobre este proceso en un artículo de la KB de Parallels.

Cada VirtualHost configurado en Apache tiene abiertos dos descriptores de fichero como mínimo: uno para el "access_log" y otro para "error_log", uno mas si el alojamiento tiene activado el soporte SSL, fichero "access_ssl_log". Además Apache tiene abiertos otros descriptores para su propio uso, para módulos como mod_security, Tomcat (mod_jk), etc..

Si tenemos un servidor web configurado con mas de 500 alojamientos bajo Plesk, posiblemente llegará un punto en el que este no arrancará ya que hemos pasado el limite máximo de ficheros abiertos de forma concurrente, establecido por el parámetro FD_SETSIZE, o estaremos muy cerca del límite máximo, lo podemos calcular con:

(2 FD por VirtualHost * 500 ) + FDs de Apache > 1024

En estos casos al tratar de arrancar Apache nos encontraremos con errores de este tipo:

Segmentation fault (11)
[warn] make_sock: problem listening on port 443, file descriptor (1068) larger than FD_SETSIZE (1024)
Unable to open logs
Too many open files


Para solucionar este error sin necesidad de recompilar Apache, a partir de Plesk 8.2 existe una funcionalidad "oculta" en el panel de control que permite reducir el uso del número de descriptores de ficheros abiertos. Una vez activada, Apache abrirá una tubería/pipe con la ayuda del programa pipelog donde todos los VirtualHosts enviarán sus logs y este se encargará de distribuirlos a los ficheros correspondientes. De este modo el número total de descriptores abiertos se reducirá casi a la mitad, ya que no será necesario abrir un "access_log" por cada alojamiento.

Para ello se eliminan todas las directivas **CustomLog** de Apache de todos los VirtualHost (en los ficheros httpd.include) y se establece una definición a nivel global para todo el servidor en el fichero zz010_psa_httpd.conf, quedando definida como:

CustomLog  |/usr/local/psa/admin/sbin/pipelog plesklog 


Existe mas información sobre la funcionalidad "piped logs" para Apache en servidores con Plesk en el artículo KB#2066 de Parallels.

Para activar este sistema en Plesk, es necesario hacer un cambio en la BBDD "psa", volver a reconfigurar todos los alojamientos con "websrvmng" y finalmente reiniciar el servidor Apache:

# mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa -e "REPLACE INTO misc (param,val) VALUES ('apache_pipelog', 'true');"
# /usr/local/psa/admin/sbin/websrvmng -v -a
# /etc/init.d/httpd graceful


Podemos comprobar los efectos de activar pipelog revisando los ficheros que abre Apache antes y después del cambio, está información esta accesible vía "/proc/$PID/fd", donde $PID se corresponde el ID del proceso de Apache, ejemplo:

# ls -l /proc/`pidof -s httpd`/fd | wc -l
280


Una vez activado este sistema, podremos realizar diversos "hacks" para monitorizar la actividad y escrituras en logs de Apache, para determinar que ficheros se abren, que dominio está teniendo mas visitas, etc.. Por ejemplo, este script refrescará cada segundo el fichero de log sobre el cual está escribiendo Apache en ese momento:

# watch -n1 ls -l /proc/`pidof pipelog`/fd


Históricamente uno de los mayores problemas ligados al panel de control Plesk ha sido la dificultad o las pocas herramientas que ponía SWSoft/Parallels para poder configurar mas de 500 alojamientos por servidor, debido a la limitación del parámetro FD_SIZE. Dicha dificultad no la impone el panel de control por si mismo, si no otras aplicaciones que dependen de este, como por ejemplo el servidor web Apache. En cambio otros paneles como cPanel, siempre han tenido herramientas para hacer este cambio de forma muy sencilla.. Sin duda alguna se trata de una estrategia comercial por parte de SWSoft/Parallels para dar empuje a otro de sus grandes productos: el sistema de virtualización Virtuozzo. Así, dividiendo el servidor físico en pequeños servidores virtuales no se alcanza el límite de FD_SIZE, a coste de pagar una licencia de Virtuozzo..

NOTA (2008-05-14): Activando este método se produce un doble logeo de los accesos, uno en el access_log de cada VirtualHost y un segundo en el access_log genérico, en CentOS el fichero es /var/log/httpd/access_log. Se trata de un bug que todavía no tiene solución en Plesk 8.4, la solución pasa por comentar la linea "CustomLog logs/access_log" en el fichero /etc/httpd/conf/httpd.conf y reiniciar Apache.

Powered by Woop!