luisico

Soporte de Syslog para Nginx

10 Jul 2008

Estos días tenía la necesidad de hacer que nginx mandase sus logs al syslog local. Nginx no tiene soporte nativo para usar syslog. Puede escribir los logs o en fichero o mandarlos a un pipe. Estuve bsucando y encontré un parche de la versión 0.6.31 que resuelve el problema. Aquí habla también un poco del parche.

A pesar de que en ese último link explica por encima como hacerlo, lo voy a contar yo también.

  • Bajamos la versión 0.6.31 de nginx en http://sysoev.ru/nginx/nginx-0.6.31.tar.gz. Según el comentario de Marlon (el creador del parche) debería funcionar también con las versiones 0.6.30 y 0.6.29, y mirando los changelogs pienso que tambíen debería funcionar en la última que es la 0.6.32. Si alguien lo prueba que me lo diga.
  • Descomprimimos:
  • # cd /usr/src/
    # tar xvzf nginx-0.6.31.tar.gz
  • Bajamos el parche:
  • # wget http://bugs.gentoo.org/attachment.cgi?id=153345 -O nginx_syslog.patch
  • Parcheamos:
  • # patch -p0 < nginx_syslog.patch
  • Compilamos e instalamos nginx:
  • # cd nginx-0.6.31
    # ./configure --with-syslog
    # make
    # make install

En mi caso antes de compilar he tenido que hacer un cambio en una linea de los fuentes del nginx. He tenido que substituir en el fichero auto/cc/gcc la siguiente linea:

CFLAGS="$CFLAGS -Werror"

por:

CFLAGS="$CFLAGS"

Esto únicamente hace que no se rompa la compilación al encontrar algun warning. En mi caso los warning que lanza la compilación se pueden ignorar tranquilamente, por lo que resulta seguro continuar con ellos.

Si todo ha ido bien deberíamos de tener funcionando nginx. Faltaría unicamente configurarlo y ponerlo en marcha. En el fichero de configuración no hace falta indicar nada para que mande correctamente los logs al syslog. Por defecto los manda a la facility daemon.

Yo lo he probado ya en servidores en producción y por el momento funciona estupendamente.

Desde aquí agradezco el esfuerzo a Marlon de Boer, que no he conseguido encontrar un blog suyo donde hacerlo.