syslog ip varia para arquivos específicos usando 'rsyslog'

8

Eu tenho muitos roteadores e switches Cisco / JunOS que enviam logs para meu servidor Debian, que usa rsyslogd .

Como posso configurar o rsyslogd para enviar esses logs do roteador / switch para um arquivo específico, com base no endereço IP de origem deles? Eu não quero poluir os logs gerais do sistema com essas entradas.

Por exemplo:

  • todos os roteadores em Chicago (bloco ip de origem: 172.17.25.0/24) para registrar apenas em /var/log/net/chicago.log .
  • todos os roteadores em Dallas (bloco ip de origem 172.17.27.0/24) para logar apenas em /var/log/net/dallas.log .
  • Excluir todas as APF-3-RCV_UNSUPP_MSG mensagens sem registrá-las
  • Enviar logs para 172.17.4.4 para um arquivo chamado /var/log/net/firewall.log
  • Encaminhar logs de firewall para 10.14.12.12 usando a porta UDP 514

Por fim, esses registros devem ser alternados diariamente por até 30 dias e compactados.

OBSERVAÇÃO: Estou respondendo minha própria pergunta     
por Mike Pennington 19.06.2012 / 22:20

2 respostas

13

rsyslogd Configuração

Em /etc/rsyslogd.conf

# provides remote UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# If logging to an NFS mount, use these settings...
#    "OMFileFlushOnTXEnd off" avoids fsync on every write...
#     mount -o hard,rsize=32768,wsize=32768,noacl,noatime,nodiratime -t nfs
$OMFileIOBufferSize 768k
$OMFileAsyncWriting on
$OMFileFlushOnTXEnd off
$OMFileFlushInterval 10
$MainMsgQueueSize 100000


# kill all INTF-FLAP messages...
if $msg contains 'INTF-FLAP' then /dev/null
&~
## Cisco ACS Accounting...
if ($fromhost-ip=='172.17.16.20') and ($programname == 'CSCOacs_TACACS_Accounting') then /var/log/tacacs_acct.log
&~
## CiscoACS 5.4 TACACS Authentication
if ($fromhost-ip=='172.17.16.20') and ($programname == 'CSCOacs_Passed_Authentications') then /var/log/tacacs_auth.log
&~

# Logging for Chicago issues...
if $fromhost-ip startswith '172.17.25' then /var/log/net/chicago.log
& ~
# Logging for Dallas issues...
if $fromhost-ip startswith '172.17.27' then /var/log/net/dallas.log
& ~
# Logging for firewall...
if $fromhost-ip=='172.17.4.4' then @10.14.12.12
if $fromhost-ip=='172.17.4.4' then /var/log/net/firewall.log
& ~

Cada uma das entradas &~ impede a passagem para o restante da configuração rsyslog.conf ; portanto, não verei as entradas do syslog do roteador em /var/log/messages .

Toque em todos os arquivos syslog:

  • touch /var/log/net/chicago.log
  • touch /var/log/net/dallas.log
  • touch /var/log/net/firewall.log

Reinicie o rsyslogd com /etc/init.d/rsyslogd restart

Rotação de log

Em /etc/logrotate.d/rsyslog

/var/log/net/*.log
{
        copytruncate
        rotate 30
        daily
        missingok
        dateext
        notifempty
        delaycompress
        create root 664 root root
        compress
        maxage 31
        sharedscripts
        lastaction
                # RHEL: Use "/sbin/service rsyslog restart"
                # Debian / Ubuntu: Use "invoke-rc.d rsyslog reload > /dev/null"
                invoke-rc.d rsyslog reload > /dev/null
        endscript
}
    
por 19.06.2012 / 22:20
3

Além disso, eu encontrei isso no wiki do rsyslog que poderia servir como referência futura para alguém.

link

    
por 10.04.2013 / 19:50