syslog ip는`rsyslog`를 사용하여 특정 파일에 이르기까지 일반 시스템 로그를 오염시키고 싶지 않습니다. 예를 들어

데비안 서버에 로그를 전송하는 Cisco / JUNOS 라우터와 스위치가 많이 rsyslogd있습니다.

rsyslogd소스 IP 주소를 기반으로 이러한 라우터 / 스위치 로그를 특정 파일로 보내도록 구성 하려면 어떻게 해야합니까? 이 항목으로 일반 시스템 로그를 오염시키고 싶지 않습니다.

예를 들어 :

  • 시카고의 모든 라우터 (소스 IP 블록 : 172.17.25.0/24)에만 로그인하십시오 /var/log/net/chicago.log.
  • Dallas의 모든 라우터 (소스 IP 블록 172.17.27.0/24)에만 로그인하십시오 /var/log/net/dallas.log.
  • APF-3-RCV_UNSUPP_MSG기록하지 않고 모든 메시지 삭제
  • 172.17.4.4에 대한 로그를 이름이 지정된 파일로 전송 /var/log/net/firewall.log
  • UDP 포트 514를 사용하여 방화벽 로그를 10.14.12.12로 전달

마지막으로이 로그는 매일 최대 30 일 동안 회전하고 압축해야합니다.


참고 : 나는 내 자신의 질문에 대답하고있다



답변

rsyslogd 구성

/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
& ~

&~항목은 나머지 rsyslog.conf구성으로 넘어지지 않습니다 . 따라서에 라우터 syslog 항목이 표시되지 않습니다 /var/log/messages.

모든 syslog 파일을 터치하십시오.

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

다시 시작 rsyslogd과 함께/etc/init.d/rsyslogd restart

로그 회전

/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
}

답변

또한 rsyslog 위키에서 나중에 누군가에게 참조 할 수있는 것으로 나타났습니다.

http://www.rsyslog.com/storing-messages-from-a-remote-system-into-a-specific-file/