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

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



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. Intenté con las propiedades, pero no he podido. Usando el formato de sintaxis viejo si he podido, pero no es aconsejable usar dicha sintaxis. Lo que si funciona es lo siguiente:

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
        }

En este caso como ven uso las propiedades pero en el string generado con el template. Luego en la regla configuro que todos los mensajes de log que vengan del host 192.168.0.5 sean guardados en una estructura como la que yo deseo.

Se pueden preguntar lo siguiente: Si ya lograste hacer lo que querías por qué estás preguntando como hacerlo??? Bueno, es que sinceramente hoy en día no sé si lo que he hecho (?CMTS;CustomFormat_Hosts) es la forma "correcta" de hacerlo. En la documentación de rsyslog se ven muuuuuchos ejemplos usando la sentencia "action", pero no he encontrado ninguno que en el campo "file" use las propiedades para generar dinámicamente los directorios o los archivos. Lo de usar ?CMTS;CustomFormat_Hosts lo saqué de un ejemplo escrito con la sintaxis vieja y por eso no sé si esa línea en particular está formalmente bien (eso si, funciona perfecto).

El tema es que la misma documentación oficial de rsyslog mezcla sintaxis nueva con vieja! Incluso su creador da ejemplos usando la sintaxis vieja!!! Una cosa de locos, sobre todo pensando que en la misma página te dicen que la sintaxis vieja por ahora es compatible, pero que en un tiempo va a dejar de serlo y por eso conviene escribir todo según la sintaxis vieja.

Me parece que esto no es algo inherentemente malo, sino que se debe a la gran velocidad de desarrollo de rsyslog. Supongo que mucha documentación no estará actualizada del todo.

En fin, a lo mejor alguno de ustedes me pueda dar una mano.

Saludos y muchas gracias.

Mauro.


Reply to: