我们在中央系统日志服务器上使用 syslog-ng(CentOS 5.9 上的 syslog-ng-2.1.4-9.el5)。我们很高兴地使用 syslogd 和 rsyslog 从 Linux 和 Solaris 主机的混合通过 UDP 发送日志,直到昨天我终于明白我们正在丢失大量条目(是的,我应该注意所有警告)。
我正在尝试更改为使用 TCP。我(目前)热衷于在中心使用 syslog-ng,在发件人上使用 rsyslog,我的理解是这应该可行。中央系统日志服务器有多个虚拟接口,用于按功能对日志集进行分段(这就是 udp() 和 tcp() 语句指定要绑定到的 IP 地址的原因)。
我在 syslog-ng 端启用了 TCP 侦听器(请参阅下面的配置文件摘录)- netstat -l 显示端口 514 上的侦听器。作为测试,我更改了一台主机上的转发子句(CentOS 6.4 和 rsyslog-5.8.10-6 .el6.x86_64) 从@unixlog 到@@unixlog。我看到到达中央服务器的数据包和返回的数据包(在 unixlog 上使用 tcpdump 查看)所以我认为我已经消除了 iptables 的问题,但是输出文件中没有出现任何内容。我只是尝试关闭 iptables 一段时间来检查这一点——同样的事情。
我没有尝试打开 syslog-ng 的调试,因为这是一个繁忙的服务器 - 我的下一步可能是设置一个测试 syslog-ng 服务器并将单个主机指向它。在我这样做之前还有什么我应该看的吗?我需要更改转发消息的格式吗?我对 Syslog-ng 2.x 文档的阅读表明,这应该可以在没有任何更改的情况下工作。我尝试更改调用 rsyslog 的兼容级别选项。最初设置为 5,我尝试了 0 .. 4 并完全删除了参数 - 行为没有区别。
发件人上的 Rsyslog.conf(已删除评论和本地文件)……
$ModLoad imuxsock
$ModLoad imklog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
*.err;kern.debug;daemon.notice;mail.crit @unixlog.ncl.ac.uk
local3.debug @cmdloghost.ncl.ac.uk
从 unixlog 上的 rsyslog.conf 中提取
options {
long_hostnames(off);
sync(0);
create_dirs(yes);
};
destination d_syslog {
file("/var/log/incoming/syslogs/$HOST/syslog.$YEAR$MONTH$DAY.log");
};
# unixlog is 10.8.232.202
source unixlog_net { udp(ip(10.8.232.202)); tcp(ip(10.8.232.202)); };
log {
source(unixlog_net);
destination(d_syslog);
};
问题是 tcpwrappers,一旦我设置了一个测试 syslog-ng 实例并在打开调试输出的情况下运行它,这很明显。将以下子句添加到 /etc/hosts.allow 就可以了
还意识到我们没有处理 syslog-ng 的内部消息(这很可能告诉我们问题所在)。现在添加了以下几行来执行此操作...