¿Cómo redirigir los registros a syslog para una aplicación que aún no admite syslog?

1

Nginx agrega el registro a la función syslog en la versión 1.7.1.

Solo puedo obtener la versión 1.6.2 ppa:nginx/stableo la versión 1.4.6 de las fuentes predeterminadas del paquete de Ubuntu.

Tengo un servidor de registro común (rsyslog) que recopila datos de unas pocas docenas de servidores. rsyslog ya está configurado en cada máquina para propagar registros a la máquina de registro primaria o al failover, si la primaria está inactiva.

¿Cuáles son mis opciones para obtener registros de Nginx en syslog local (que luego rsyslog enviará al servidor remoto)?


Nota: aunque las respuestas relacionadas directamente con el registro de Nginx son bienvenidas, también estoy buscando respuestas generales que se apliquen a cualquier aplicación (por lo tanto, la falta de etiqueta para esta pregunta). La razón es que todavía no he migrado todas las aplicaciones syslog, y espero que otras aplicaciones causen problemas similares.


Notas importantes relacionadas con la respuesta aceptada:

  1. Si bien inotifyestá disponible desde la versión beta de rsyslog 5.9.6, el 12 de abril de 2012 , solo se admite desde el 24 de enero de 2014 en rsyslog 8.1.5 .

    Esto requiere su uso ppa:adiscon/v8-stableen Ubuntu, ya que la última distribución de Ubuntu en el momento de la escritura (14.04 LTS) está utilizando rsyslog 7.4.4.

  2. inotifyel modo se especifica en module(), no input():

    module(load="imfile" mode="inotify")
    

    Con inotify, PollingIntervalno tiene que especificarse.

  3. Cuando la configuración es incorrecta, rsyslogno registra nada en /var/log/syslog. Para inspeccionar lo que está mal, el comando rsyslogd -N1parece ser muy útil. Obviamente, ps -A | grep rsyslogtambién ayuda para saber si se rsyslogestá ejecutando.

    La rsyslogversión actual se puede obtener ejecutando rsyslogd -version.

  4. ReadModeen input() debe establecerse en cero .

  5. La configuración module()y "debe colocarse en la parte superior del archivo rsyslog.conf" .input()

  6. Parece que rsyslogodia a Nginx. No importa en qué propietario, grupo o permisos estén configurados /var/log/nginx/o /var/log/nginx/access.log, los cambios en el archivo se ignoran (sin ningún error). Lo mismo ocurre con cualquier otro archivo creado en el /var/log/nginx/directorio.

    Cuando los archivos se crean en un directorio diferente, como /home/demo/o /var/log/, los cambios se reflejan syslogcomo se esperaba.

Arseni Mourzenko
fuente
¿Le gusta un script / proceso para leer los registros de nginx cada 1/5/10 minutos y agregar nuevas líneas en syslog?
Xen2050
@ Xen2050: estaba buscando algo que transmitiera las entradas de registro directamente al servidor de registro.
Arseni Mourzenko

Respuestas:

0

Supongo que tiene rsyslog ejecutándose en la máquina local y que reenvía registros a su servidor de registro remoto.

De la documentación de rsyslog, parece que puede definir un módulo de entrada para hacer exactamente lo que desea. Vi detalles de esto aquí:

http://www.rsyslog.com/doc/master/configuration/modules/imfile.html

Incluso proporciona algunos ejemplos ingeniosos.

Thomas N
fuente