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

Re: Mayúsculas en la propiedad hostname de rsyslog



El 25/07/16 a las 16:11, Luis Enrique Araneda escribió:
Estimadisimo, de verdad desconosco la respuesta pero si me encantaria que pudiaras compartir el como crear un servidor de rsyslog... sería interesante... saludos!
Encantado, pero mirá, como es un tema muyyyy largo (podés hacer de todo con rsyslog, está genial realmente) te voy a decir lo que para mi fue lo más complicado, y es como guardar los mensajes en directorios separados por fecha y host y luego como definir el formato de mensaje a guardar. Después cualquier otra duda que tengas me podés preguntar.

Mirá, lo primero es detectar el host del cual provienen los mensajes y después definir el directorio y el formato del mensaje como vos querés que se guarde. Un ejemplo a continuación:

if $fromhost-ip == '172.30.0.50' then{
        ?Nodo_PA_AP;CustomFormat_Nodo_PA_AP
        stop
        }

else{
        ?PROGRAMNAME;CustomFormat_PROGRAMNAME
        stop
        }

Complicado? Para nadamirá:

$fromhost-ip == '172.30.0.50' then  <--- Obvio, si la IP del host es 172.30.0.50 entonces hago lo que dice a continuación
?Nodo_PA_AP;CustomFormat_Nodo_PA_AP <--- Dividámoslo en dos partes
Nodo_PA_AP                          <--- Template que define el nombre del directorio
CustomFormat_Nodo_PA_AP             <--- Template que define el formato del mensaje a guardar
stop                                <--- Necesario para "salir" del if y seguir procesando los mensajes según  la configuración que siga

else                                   <--- Por supuesto, para cualquier otra IP que no sea la especificada
?PROGRAMNAME;CustomFormat_PROGRAMNAME  <--- Templates genéricos
stop                                   <--- Necesario para "salir" del else

Y los templates son los siguientes:

template(name="Nodo_PA_AP" type="string" string="/srv/Logs/%$year%/%$month%/%$day%/Nodo_PA/AP430/AP430.log")
Donde se van a guardar los logs que vengan de la IP 172.30.0.50

template(name="CustomFormat_Nodo_PA_AP" type="string" string="%$year%-%$month%-%$day% %$hour%:%$minute% %hostname% %syslogtag% %msg%\n")
Formato del mensaje guardado en el archivo "AP430.log"

template(name="PROGRAMNAME" type="string" string="/srv/Logs/%$year%/%$month%/%$day%/%hostname:1:1:uppercase%%hostname:2:$%/%programname%.log")
Donde se van a guardar los logs del resto de los hosts

template(name="CustomFormat_PROGRAMNAME" type="string" String="%$year%-%$month%-%$day% %$hour%:%$minute% %hostname:1:1:uppercase%%hostname:2:$% %syslogtag% %msg%\n")
Formato del mensaje

Parece complicado pero no lo es tanto. Lo que está entre % son lo que se llaman "properties" de rsyslog, que para entenderlas mejor mirate esto (están muy buenas):

http://www.rsyslog.com/doc/master/configuration/properties.html

Y lo que dice "%hostname:1:1:uppercase%%hostname:2:$%" es el "propierty replacer" aplicado a la propiedad "hostname". Lo que estoy haciendo ahí es poner la primera letra de cada nombre de host en mayúsculas :D, así de simple.

Hay muuuuuuucho más para hablar, pero con eso te dije lo que considero más importante. Un detalle, mucho cuidado porque hay dando vueltas muuuuuucha (hoy se me tildó la "u") documentación de la v5.x, la cual posee una sintaxis completamente distinta. De yapa si usás Debian 7 o anteriores la versión por defecto de rsyslog es la 5.x, por lo que tenés que agregar un repositorio e instalar la versión nueva (8.x) desde ahí (es muy simple y en la misma página de rsyslog te dice como).

Para que te des una idea del potencial podés hacer que rsyslog escriba directamente en una DB, ideal por ejemplo para un servidor DHCP, ya que también podés "desmembrar" el log DHCP y obtener los OFFER, REQUEST, ACK, etc. e ir guardando todo si hace falta, como verás es muy potente.

Espero te sirva, cualquier cosa me preguntás, eso si, si no respondo a la lista avisame por privado, ya que a veces pasan varios días que no puedo ver la lista y no veo los mensajes.

Saludos y éxitos!

Mauro.



El 25 de julio de 2016, 15:03, Mauro Antivero <mauro.antivero@gmail.com> escribió:
Estimados, desde hace un tiempo tengo un servidor de rsyslog funcionando y recibiendo los logs de una buena cantidad de equipos. Esto me ha sido de gran ayuda en múltiples ocasiones. Tengo todo dividido primero por fecha y después por nombre de equipo, por ejemplo:

año/mes/dia/hora/Servidor1
año/mes/dia/hora/Servidor2
año/mes/dia/hora/Servidor3

Notar que puse la primera letra del nombre del servidor en mayúscula... Y si, es que soy bastante quisquilloso y me gusta usar mayúsculas en los nombres de mis servidores... Para lograr que la primera letra quede en mayúscula usé el "property replacer" de la siguiente manera:

%hostname:1:1:uppercase%%hostname:2:$%

Qué locura no? Y si... Ustedes entenderán, cada uno tiene sus locuras, y una de las mías es el uso de mayúsculas... En fin, hasta aquí todo bien, estaba feliz con lo que había logrado, hasta que comencé a tener equipos con nombre del siguiente tipo:

Servidor_A
Servidor_B
Servidor_C

El uso del property replacer como definí anteriormente me da como resultado lo siguiente:

Servidor_a
Servidor_b
Servidor_c

Es decir, solo me deja la primera letra en mayúscula (lo cual está bien, pero no es lo que yo quiero). Ya he intentado varias cosas, como por ejemplo definir los hosts en el archivo /etc/hostname, pero en ese caso utiliza todo en minúsculas.

Se que esto es en si una pavada, pero es algo que a mi me molesta y si es posible me gustaría acomodar. Alguien tiene idea si se puede lograr lo que yo deseo? Desde ya les agradezco mucho por su tiempo y ayuda.

Saludos, Mauro.

PD: Este correo salió con formato HTML o no? En teoría lo configuré para que no.




--
Luis Enrique Araneda
Ingeniero en sistemas


Reply to: