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.antiv...@gmail.com <mailto:mauro.antiv...@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