[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Problema con filtros rsyslog en debian



Buenas, tengo un servidor de logs centralizado, y quiero poner un
filtro para que, dependiendo del virtualname (subdominio vhost apache)
del que llegue, lo escriba en un log o en otro.

Tengo 5 nodos web, los cuales envían los logs por las facility en remoto:

facility local1.info  --> access.log

facility local3.info --> ssl_access.log


Y configurando rsyslog, lo mando en remoto al servidor de logs, por
ejemplo 192.168.1.33

local1.info @@192.168.1.33

local2.info @@192.168.1.33


Actualmente tengo esta configuración en el servidor de logs:

$template MsgFormat,"%msg:2:$%\n"

local1.*                        /var/log/remote/access.log;MsgFormat
local2.*                        /var/log/remote/error.log;MsgFormat
local3.*                        /var/log/remote/ssl_access.log;MsgFormat

En el cual me ayudasteis, sobre todo Camaleón, para quitar el
timestamp de rsyslog que añade al log. Esto me funciona bien.

El problema viene al generar estadísticas, porque por cada subdominio
se tiene que recorrer todo el log, ya que están todos los subdominios
en el mismo log, y quiero separarlos y filtrarlo en el servidor de
logs, ej:

m.prueba1.es --> /var/log/m.prueba1.es.log
m.prueba2.es --> /var/log/m.prueba2.es.log
m.prueba3.es --> /var/log/m.prueba3.es.log

Editando rsyslog, lo dejo así:

$template MsgFormat,"%msg:2:$%\n"

$template m.prueba1.es,"/var/log/m.prueba1.es.log"

if $syslogfacility-text == 'local1' and $msg startswith
'm.prueba1.es.log' and  $programname == 'httpd' then
-?m.prueba1.es;MsgFormat

#local1.*                        /var/log/remote/access.log;MsgFormat
local2.*                        /var/log/remote/error.log;MsgFormat
local3.*                        /var/log/remote/ssl_access.log;MsgFormat

Con esto, no me crea ni si quiera el log /var/log/m.prueba1.es.log .

No sé que estoy haciendo mal...Puede ser que el template de MsgFormat
se aplique tarde, al estar al final de la linea (el de timestamp) y el
principio de la linea sea la que incluye rsyslog el timestamp y por
eso no puede leer el m.prueba1.es de virtualname?

O puede ser la versión de rsyslog, que la tengo un poquito anticuada?

Gracias de antemano.

Saludos.


Reply to: