所以这是我们的设置
服务器: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。