Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I have many Cisco / JunOS routers and switches that send logs to my Debian server, which uses rsyslogd.

How can I configure rsyslogd to send these router / switch logs to a specific file, based on their source IP address? I do not want to pollute general system logs with these entries.

For instance:

  • all routers in Chicago (source ip block: to only log to /var/log/net/chicago.log.
  • all routers in Dallas (source ip block to only log to /var/log/net/dallas.log.
  • Delete all APF-3-RCV_UNSUPP_MSG messages without logging them
  • Send logs for to a file named /var/log/net/firewall.log
  • Forward firewall logs to using UDP port 514

Finally, these logs should be rotated daily for up to 30 days and compressed.

NOTE: I am answering my own question

share|improve this question
add comment

2 Answers

up vote 5 down vote accepted

rsyslogd Configuration

In /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,nocto,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=='') and ($programname == 'CSCOacs_TACACS_Accounting') then /var/log/tacacs_acct.log
## CiscoACS 5.4 TACACS Authentication
if ($fromhost-ip=='') 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=='' then @
if $fromhost-ip=='' then /var/log/net/firewall.log
& ~

Each of the &~ entries prevents fall-through to the rest of the rsyslog.conf configuration; thus I won't see router syslog entries in /var/log/messages.

Touch all syslog files:

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

Restart rsyslogd with /etc/init.d/rsyslogd restart

Log rotation

In /etc/logrotate.d/rsyslog

        rotate 30
        maxage 31
                invoke-rc.d rsyslog reload > /dev/null
share|improve this answer
add comment

Also, I found this on the rsyslog wiki that could serve as future refernce for someone.


share|improve this answer
add comment

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.