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: