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

Separar logs con rsyslog por host y por facilities y prioridades



Estimados, gracias a la ayuda que me han dado he avanzado mucho con la configuración de rsyslog. Ya logro hacer que detecte los mensajes provenientes de distintos hosts y que los guarde en directorios separados por fecha y por host y que además el registro (es decir el texto que se escribe dentro del archivo de log) sea personalizado. Perfecto hasta ahí.

Ahora lo que me falta es lograr separar los logs, además de por host, por facilities y prioridades, tal como se hace con los logs locales. Pues bien, ya entiendo como configurar los logs locales por facilities y prioridades, pero no me doy cuenta de como tiene que ser la estructura de configuración de rsyslog.conf para que además de separar por nombre de host me separe dentro de cada directorio correspondiente a cada host según las facilities y prioridades.

Pongo a continuación un extracto de como es actualmente mi rsyslog.conf para que lo vean y si de paso les sirve puedan tomar algo. Traté de escribirlo todo usando la nueva sintaxis, pero a lo mejor algo quedó en el formato viejo (puesto que como ya hablamos acá en otro hilo la documentación de que es viejo y que es nuevo en rsyslog es medio desastrosa). Lo que hace básicamente es separa los logs por nombre de host (salvo para una IP en particular, en cual caso detecto el mensaje por IP de origen y luego lo guardo en un directorio predefinido) y escribe un mensaje de log personalizado.

Como verán todos los mensajes de un determinado host se guardan dentro de un solo archivo, "syslog.log". Mi intención como les decía es separar dentro de la carpeta correspondiente lo que es auth de mail, dhcp, cron, etc., etc., tal como sucede con los logs locales.

Acá va el estracto del archivo (puede tener algún error porque lo modifiqué acá en el correo, pero la configuración que tengo es funcional):

/**********************************************************************************************************************************************************************************/

#################
#### MÓDULOS ####
#################

# Carga de módulos por defecto

Module(load = "imuxsock") # provides support for local system logging
Module(load = "imklog")   # provides kernel logging support

# Se carga el módulo para recepción de logs por UDP y se "ata" al mismo a la regla "remote", la cual hará que todos los logs remotos se escriban dentro
# del directorio /var/log/rsyslog

Module(load = "imudp")
Input(type = "imudp" port = "XXX" ruleset = "remote")

###################
#### TEMPLATES ####
###################

# Templates para los directorios

template(name="HOSTS" type="string" string="/var/log/rsyslog/%$year%/%$month%/%$day%/%hostname%/syslog.log") template(name="CUSTOM" type="string" string="/var/log/rsyslog/%$year%/%$month%/%$day%/CUSTOM/syslog.log")

# Templates para personalizar los registros (Fecha, hora, hostname, tag y mensaje de log propiamente dicho)

template(name="CustomFormat_Hosts" type="string" String="%$year%-%$month%-%$day% %$hour%:%$minute% %hostname% %syslogtag% %msg%\n") template(name="CustomFormat_CUSTOM" type="string" string="%$year%-%$month%-%$day% %$hour%:%$minute% CUSTOM %syslogtag% %msg%\n")

#############################
#### DIRECTIVAS GLOBALES ####
#############################

# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# Set the default permissions for all log files.

$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

# Where to place spool and state files

$WorkDirectory /var/spool/rsyslog

# Include all config files in /etc/rsyslog.d/

$IncludeConfig /etc/rsyslog.d/*.conf

##################################
#### Reglas para logs remotos ####
##################################

# Se define la regla "remote", la cual se utilizará para los logs remotos. Salvo que se trate de una IP en particular
# se separa todo por nombre de host

ruleset(name="remote"){
    if $fromhost-ip == 'aaa.bbb.ccc.ddd' then{
        ?CUSTOM;CustomFormat_CUSTOM
        stop
        }

    else{
        ?HOSTS;CustomFormat_Hosts
        stop
        }
    }

##################################
#### Reglas para logs locales ####
##################################

# First some standard log files.  Log by facility.

auth,authpriv.*                /var/log/auth.log
*.*;auth,authpriv.none        -/var/log/syslog
cron.*                            /var/log/cron.log
daemon.*                            -/var/log/daemon.log
kern.*                            -/var/log/kern.log
lpr.*                                -/var/log/lpr.log
mail.*                            -/var/log/mail.log
user.*                            -/var/log/user.log

# Logging for the mail system. Split it up so that it is easy to write scripts to parse these files.

mail.info                        -/var/log/mail.info
mail.warn                        -/var/log/mail.warn
mail.err                            /var/log/mail.err

# Logging for INN news system.

news.crit                        /var/log/news/news.crit
news.err                            /var/log/news/news.err
news.notice                        -/var/log/news/news.notice


# Some "catch-all" log files.

*.=debug;\
    auth,authpriv.none;\
    news.none;mail.none    -/var/log/debug
*.=info;*.=notice;*.=warn;\
    auth,authpriv.none;\
    cron,daemon.none;\
    mail,news.none        -/var/log/messages

# Emergencies are sent to everybody logged in.

*.emerg                        :omusrmsg:*

# NOTE: adjust the list below, or you'll go crazy if you have a reasonably busy site..

daemon.*;mail.*;\
    news.err;\
    *.=debug;*.=info;\
    *.=notice;*.=warn    |/dev/xconsole

/**********************************************************************************************************************************************************************************/

Espero se entienda lo que quiero lograr. Les agradecería mucho su ayuda.

Saludos! Mauro


Reply to: