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

Re: Problema con filtros rsyslog en debian



El Mon, 17 Nov 2014 12:58:35 +0100, Maykel Franco escribió:

> 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.

(...)

> 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:

(...)

Maykel, ¿no sería más sencillo y eficiente separar los registros de los 
subdominios en origen? Es decir, configurar Apache para que genere un
registro por dada subdominio (sub1.example.org/sub1.example.org) y cada 
tipo (sub1.example.org_access.log/sub1.example.org_secure.log/
sub1.example.org_error.log) por separado.

> 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?

En la documentación de rsyslog¹ (no sé qué versión estás usando) dice que 
para que funcione ese comparador la línea tiene que empezar con espacio, 
algo que me parece has eliminado expresamente:

***
Note: when processing syslog messages, please note that $msg usually 
starts with a space. The reason for this is RFC3164. Please read the 
detail description of what that means to you. In short, you need to make 
sure that you include the first space if you use "startswith", otherwise 
you will not get matches. 
***

¹http://www.rsyslog.com/doc/rsyslog_conf_filter.html

Saludos,

-- 
Camaleón


Reply to: