Syslog 不会将通过 TCP 接收的日志记录到文件中

Syslog 不会将通过 TCP 接收的日志记录到文件中

我正在尝试在 CentOS 6.5 上为 Cisco 路由器和交换机设置一个集中式 rsyslog 服务器。在 Cisco 设备上,我设置了正确的日期/时间并启用了时间戳,通过端口 514 上的 TCP 记录到服务器,将路由器的设备设置为 local4,将交换机的设备设置为 local5,并捕获调试以进行测试。

在 /etc/rsyslog.conf 中,我启用了 TCP 并将 local4.* 设置为记录到 /var/log/cisco/routers.log,将 local5.* 设置为记录到 /var/log/cisco/switches.log。

我检查了 SELinux,它没有报告任何违规行为。我测试了防火墙是否打开(允许端口 514 通过)和 iptables 是否关闭。我可以看到连接已建立,并且 tcpdump 显示 syslog 数据包正在进入服务器,但 syslog 不会将任何内容记录到文件中。它也不会将收到的任何内容记录到 /var/log/messages 中。

当我使用 UDP 进行测试时,它运行良好。而且这无需修改 $AllowedSender。您知道问题可能出在哪里吗?

答案1

看起来您需要配置配置的 $imtcp 部分。

module(load="imtcp" MaxSessions="500")
input(type="imtcp" port="514")

将其添加到 rsyslog.conf 的开头,然后重新启动服务。

答案2

根据您使用的思科设备和 IOS 版本,可能无法真正通过 TCP 从设备发送到系统日志服务器。

简而言之:使用 UDP。如果这不可行,那么本白皮书可能会帮助您了解如何设置日志记录的详细信息。

https://www.cisco.com/c/en/us/products/collat​​eral/services/high-availability/white_paper_c11-557812.html

论文中部分相关的简短引述:

“一种技术是部署像 syslog-ng 这样的工具,它是针对 UNIX(Solaris)和类 UNIX 系统(Linux)的 Syslog 协议的开源实现。它通过基于内容的过滤、丰富的过滤功能和灵活的配置选项扩展了原始的 syslog 守护进程模型,并为 Syslog 添加了重要功能,例如在 syslog-ng 服务器之间使用 TCP 作为传输协议。(目前许多硬件供应商不支持 TCP 传输。”

(请注意该论文是 2009 年的)

TCP 支持...[适用于] 12.4(11)T、12.2(33)SRB、12.2(33)SB 和 Cisco IOS XE 版本 2.1 12.2(33)SXI 之后的 Cisco IOS 软件版本。

答案3

检查 rsyslogd 是否确实在使用中监听 TCP 端口netstat -tplne 。也许您没有正确启用 TCP 套接字。您还可以运行 rsyslog 来查明发生了什么 (-d)

相关内容