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

Re: Generación dinámica de archivo de log con rsyslog



El 09/05/14 11:12, Camaleón escribió:
El Thu, 08 May 2014 14:19:33 -0300, Mauro Antivero escribió:

Estimados, estoy tratando de hacer que rsyslog me escriba determinados
logs en distintos directorios según la fecha. El siguiente es un ejemplo
que funciona, pero no hace lo que quiero (osea, en este caso se guarda
todo en un mismo archivo en /var/log/rsyslog/rsyslog.log):

ruleset(name="remote"){
      if $fromhost-ip == '192.168.0.5' then {
          action(type="omfile" file="/var/log/rsyslog/syslog.log")
          stop }

Y lo que quiero en realidad es algo de este tipo:

ruleset(name="remote"){
      if $fromhost-ip == '192.168.0.5' then {
          action(type="omfile"
file="/var/log/rsyslog/año/mes/día/syslog.log")
          stop }

Pero no logro hacerlo andar.
(...)

Pues así, sin entrar en muchos detalles, entiendo que cuando defines la
variable "file" tienes que pasarle una ruta que exista porque no creo que
rsyslog tenga permisos para crear directorios "al vuelo".
Mmm... En mi caso no es así (Debian Wheezy con todo por defecto), si borro la ruta ni bien entra un log rsyslog crea la ruta completa, ya lo he probado varias veces, puesto que cada vez que hago un cambio en la configuración borro todo dentro de la carpeta /var/log/rsyslog para empezar de cero.

Ahora bien, es posible que tengas alguna otra variable que te permita
directa o indirectamente hacer lo que buscas (p. ej., a través de un
pequeño script que se encargue de crear antes la estructura de
directorios) o también podrías simplemente usar las variables de año-mes-
día en el nombre del archivo.
Como te decía en mi caso no es así. A mi me sucede que si hago lo siguiente:

ruleset(name="remote"){
     if $fromhost-ip == '192.168.0.5' then {
action(type="omfile" file="/var/log/rsyslog/%$year%/%$month%/%$day%/syslog.log")
         stop
         }

Lo que logro es que se me genere la siguiente ruta (tal cual la escribo):

/var/log/rsyslog/%$año%/%$mes%/%$día%/syslog.log

Osea que no me toma las propiedades $month y demás. Cosa que si me las tomaba usando el formato viejo. Lo que logré hacer para que funcione (lo acabo de poner en el mail anterior pero lo repito por claridad) es lo siguiente:

template(name="HOSTS" type="string" string="/var/log/rsyslog/%$year%/%$month%/%$day%/%hostname%/syslog.log") template(name="CustomFormat_Hosts" type="string" String="%$year%-%$month%-%$day% %$hour%:%$minute% %hostname% %syslogtag% %msg%\n")

ruleset(name="remote"){
    if $fromhost-ip == '192.168.0.5' then {
        ?CMTS;CustomFormat_Hosts
        stop
        }

El template "HOSTS" define la ruta dinámica.
El template "CustomFormat_Hosts" define el contenido del archivo.

Mmm... Me parece que me estoy enroscando demasiado. Lo que me mareó acá es que no puedo usar la sentencia action(type="..."), que SE que corresponde al nuevo formato. Mi pregunta en concreto es, el operador (o como sea que se llame dentro de la jerga de rsyslog) "?", corresponde al formato viejo, nuevo o a ambos? Perdón si por tanta pavada generé tanto lío, pero como ya se habló la documentación de rsyslog es un lío.

Saludos y muchas gracias!





Saludos,



Reply to: