quarta-feira, 4 de maio de 2016

Servidor Syslog-ng - Gerenciamento Centralizado de Logs

Instalação do servidor

A instalação é bastante simples e não demanda nenhum pré-requisito
# yum -y install syslog-ng

Vamos parar o serviço de log tradicional (rsyslog)
# systemctl stop rsyslog
# systemctl disable rsyslog

Iniciar e configurar para inicio automático o syslog-ng
# systemctl start syslog-ng
# systemctl enable syslog-ng

Manteremos uma cópia do arquivo original, até por questões de consulta de parâmetros.
# cd /etc/syslog-ng
# cp syslog-ng.conf syslog-ng.conf.orig

E gerar um novo arquivo com os parâmetros desejados. Em destaque os parâmetros que foram alterados.
# vi /etc/syslog-ng/syslog-ng.conf
@version:3.5
@include "scl.conf"

# syslog-ng configuration file.
#
# This should behave pretty much like the original syslog on RedHat. But
# it could be configured a lot smarter.
#
# See syslog-ng(8) and syslog-ng.conf(5) for more information.
#
# Note: it also sources additional configuration files (*.conf)
#       located in /etc/syslog-ng/conf.d/

# Define Global Options
options {
    flush_lines (0);
    time_reopen (10);
    log_fifo_size (10000);
    chain_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (no);
    keep_hostname (yes);
};

# Define input source
source s_sys {
    system();
    internal();
};

source s_net {
udp(ip(0.0.0.0) port(514));
tcp(ip(0.0.0.0) port(514));
};

# Define Destination for Local Logs
destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" flush_lines(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_kern { file("/var/log/kern"); };
destination d_mlal { usertty("*"); };

# Define Destination for Remote Log
destination netlogpile { file(
"/var/log/servers/$FULLHOST/$YEAR/$MONTH/$DAY/$FULLHOST-$YEAR-$MONTH-$DAY.log"
owner(root) group(root) perm (0600)
create_dirs ( yes ) dir_perm( 0700 ));
};

filter f_kernel     { facility(kern); };
filter f_default    { level(info..emerg) and
                        not (facility(mail)
                        or facility(authpriv)
                        or facility(cron)); };
filter f_auth       { facility(authpriv); };
filter f_mail       { facility(mail); };
filter f_emergency  { level(emerg); };
filter f_news       { facility(uucp) or
                        (facility(news)
                        and level(crit..emerg)); };
filter f_boot   { facility(local7); };
filter f_cron   { facility(cron); };

# Define local logging destination

#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };

# Define network logging destination
log { source(s_net); destination(netlogpile); };

# Source additional configuration files (.conf extension only)
@include "/etc/syslog-ng/conf.d/*.conf"

# vim:ft=syslog-ng:ai:si:ts=4:sw=4:et:

Basicamente o que fizemos foi aumentar o número de logs que ele gerencia na fila de entrada e criar uma estrutura para nossos logs:
“/var/log/servers/$FULLHOST/$YEAR/$MONTH/$DAY/$FULLHOST-$YEAR-$MONTH-$DAY.log”

Que vai se traduzir em:
“/var/log/servers/nome_do_servidor_de_origem_dos_logs/ano/mês/dia/ nome_do_servidor_de_origem_dos_logs-ano-mês-dia.log”

Reiniciar o serviço
# systemctl restart syslog-ng

Rotate dos Logs

Vamos manter o registro dos logs dos últimos 120 dias , faremos isso com o crontab e o comando find, conforme orientação da própria documentação oficial.

# contrab -e
# Todos os dias as 01:00 gera o gzip dos logs do dia anterior
0       1       *       *       *       /usr/bin/find /var/log/servers/ -daystart -mtime +0 ! -name "*.gz" -type f ! -path "*`/bin/date +%Y/%m/%d`*" -exec /usr/bin/gzip {} \;

# Todos os dias as 02:00 remove os logs do Syslog-ng com mais de 120 dias
0       2       *       *       *       /usr/bin/find /var/log/servers/ -daystart -mtime +120 -type f -exec rm {} \;

Referencias

ZF SHARE IS CARE Board
Peter@BalaBit
The syslog-ng Open Source Edition
Michael King

Nenhum comentário: