El 09/05/14 02:48, C. L. Martinez
escribió:
Perdón, estoy usando la 8.2.12014-05-08 17:19 GMT+00:00 Mauro Antivero <mauro.antivero@gmail.com>: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.Bueno, el tema documentación en rsyslog solo tiene un calificativo: desastroso. Pero, es superable :)). A ver, de entrada está mezclando sintaxis antigua con sintaxis nueva. De entrada, ¿que versión rsyslog estás utilizando? Por solo tienes dos opciones: Estoy tratando de ir por la b.a) Configurar todo con sintaxis antigua. b) Configurar todo con sintaxis nueva. Esta ($template) es justamente la sintaxis vieja. La nueva es del tipo template(name="...").Ahora mismo lo has mezclado todo. Yo nunca he tratado de hacer lo que estás intentando (básicamente porque sería infumable gestionar en archivos planos el alto volumen de logs que debo gestionar), pero te pongo un ejemplo de como utilizar los templates en sintaxis nueva (versiones 6.x en adelante): #### Templates definitions #### $template idp01_rfc5424fmt,"suricata idp01 %fromhost-ip% %msg%\n" Es que ese es un template distinto, vos ahí estás usando el módulo "omfwd", que no lo conozco pero supongo que hace forward hacia donde vos le indiques (172.17.22.1). Yo en todo caso quiero usar el módulo "omfile" y que el archivo sea generado dentro de una estructura de directorios que indique el año/mes/día. El tema es que si lo quiero hacer con la sintaxis:if $syslogtag == 'idp01' then { action(type="omfwd" protocol="tcp" target="172.17.22.1" port="10514" template="suricata01_rfc5424fmt" queue.filename="suricata01fwd" queue.maxdiskspace="10g" queue.saveonshutdown="on" queue.type="linkedlist" queue.maxfilesize="5m" action.resumeretrycount="-1") stop } Como ves, la forma de utilizar el template difiere mucho de como la has configurado. action(type="omfile" file="/var/log/rsyslog/año/mes/día/syslog.log") No logro hacer que me tome como nombre de directorios al año, al mes y al día, ya que no me reconoce las "propierties" ($year, $month y $day). Como decía, lo que me funciona 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 } Que en respuesta a lo que está más abajo fijate que no tengo en cuenta las horas y los minutos para la generación de la ruta, sino que la ruta es año/mes/día/syslog.log y lo que se guarda dentro de este archivo es: año-mes-día hora:minuto host tag mensaje /n Pido disculpas porque en el correo original me olvidé de incluir el template "HOSTS" que es el que define el string para la ruta al archivo, y esto puede haber generado confusiones. En resumen, de esta manera (usando ?CMTS;CustomFormat_Hosts luego del "then") me funciona, pero no sé si eso no es justamente el formato viejo. Me gustaría dejarlo con una sentencia tipo "action", pero eso es lo que no puedo hacer. Si, los dos templates (el de la generación dinámica de la ruta y el que indica que es lo que se debe escribir dentro del archivo) funcionan perfectamente :)Prueba a ajustarla. Creo que la definición del propio template es correcta. Te entiendo perfectamente, pero como explicaba más arriva esto no es lo que hice.Por cierto, ¿estás seguro que quieres crear directorios de hora y minuto?. Yo no lo haría porque dependiendo del volumen, ya puedes tener un disco muy muy rápido en escritura. Piensa que rsyslog está pensado para trabajar con +100K EPS ... O sea que puede llevar a tu disco de cabeza :)) Saludos y muchas gracias.Saludos. Mauro. |