Linux

rsyslog 從遠端 cisco 交換機創建多個日誌文件的問題

  • October 18, 2021

所以這是我們的設置

伺服器:rsyslog 伺服器 - CentOS 7

客戶端:Cisco Catalyst C6880-X-LE

/etc/rsyslog.conf 從 CentOS 7 伺服器:

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal

$template TmplAuth, "/var/log/client_logs/%HOSTNAME%/%PROGRAMNAME%.log"
$template TmplMsg, "/var/log/client_logs/%HOSTNAME%/%PROGRAMNAME%.log"
authpriv.* ?TmplAuth
*.info;mail.none;authpriv.none;cron.none ?TmplMsg
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

由於文件夾中的某種原因,/var/log/client_logs每次在交換機上生成新的日誌消息時,cisco 日誌都會創建一個新的 .log 文件。這顯然不理想,我希望 rsyslog 將所有日誌放在一個文件中,並且我計劃讓 logrotate 處理每天創建一個新的日誌文件。

這是我在/var/log/client_logs目錄中看到的範例

-rw------- 1 root root 184 Oct 13 14:30 156598.log
-rw------- 1 root root 164 Oct 13 14:30 156599.log
-rw------- 1 root root 186 Oct 13 14:30 156600.log
-rw------- 1 root root 162 Oct 13 14:30 156601.log
-rw------- 1 root root 184 Oct 13 14:30 156602.log
-rw------- 1 root root 164 Oct 13 14:35 156603.log
-rw------- 1 root root 186 Oct 13 14:35 156604.log
-rw------- 1 root root 162 Oct 13 14:35 156605.log
-rw------- 1 root root 184 Oct 13 14:35 156606.log
-rw------- 1 root root 164 Oct 13 14:35 156607.log
-rw------- 1 root root 186 Oct 13 14:35 156608.log
-rw------- 1 root root 162 Oct 13 14:35 156609.log
-rw------- 1 root root 184 Oct 13 14:35 156610.log
-rw------- 1 root root 162 Oct 13 14:39 156611.log
-rw------- 1 root root 164 Oct 13 14:41 156612.log
-rw------- 1 root root 186 Oct 13 14:41 156613.log
-rw------- 1 root root 162 Oct 13 14:41 156614.log
-rw------- 1 root root 184 Oct 13 14:41 156615.log

考慮到它正在為從 Cisco 交換機發送的每條新消息創建一個 .log,這將永遠持續下去。以下是這些日誌文件之一的內容範例

2021-10-13T14:41:10.866435-07:00 X 156613: X-Switch: .Oct 13 13:40:44 PST: %LINEPROTO-SW1-5-UPDOWN: Line protocol on Interface GigabitEthernet195/1/0/11, changed state to down

我不確定問題出在 Cisco 交換機上的配置還是我的 rsyslog 配置上,但我之前已經這樣做過,並且從未遇到過為發送到伺服器的每條消息創建新的 .log 文件的任何問題。

這是 Cisco 交換機端的配置

Switch1#show run | include logging
logging userinfo
logging reload debugging
logging event link-status default
logging origin-id hostname
logging host 10.1.1.1
logging synchronous
logging synchronous

僅供參考,該logging host語句是 CentOS 7 rsyslog 伺服器的 IP 地址。從其他主機擷取的所有其他日誌都很好,並且不會為收到的每條消息創建新的 .log 文件,但是發送日誌的其他系統不是 Cisco 交換機,它們都是各種 Linux 風格(主要是 CentOS 和 RHEL)。

知道為什麼 rsyslog 會為它從這個 Cisco Catalyst 交換機收到的每條消息創建新的 .log 文件嗎?

消息範例如下:

2021-10-13T14:41:10.866435-07:00 X 156613: X-Switch: .Oct 13 13:40:44 PST: %LINEPROTO-SW1-5-UPDOWN: Line protocol on Interface GigabitEthernet195/1/0/11, changed state to down

似乎 PROGRAMNAME 指向每條消息都加一的數字,在這種特定情況下為 156613:

$template TmplAuth, "/var/log/client_logs/%HOSTNAME%/%PROGRAMNAME%.log"

所以上面的配置看起來是正確的。根本原因可能是在消息中遞增的 PROGRAMNAME。

引用自:https://serverfault.com/questions/1080473