我正在使用Syslog-NG 3.8作为syslog服务器,它接收来自许多不同来源的消息,这些消息来自大约400台服务器(并过滤它们并最终中继到splunk服务器)。
但是,看起来很多消息甚至在被过滤并转发到splunk实例之前都已被“丢弃”。
我有一个配置,在过滤到平面文件之前,我一直跟踪“传入”消息,并且在那里看不到某些消息(请参见下面的示例),而在运行时我可以成功看到tcp跟踪一个tcpdump,表示Syslog-NG在“源”机制期间“丢弃”消息。
我怀疑这是由于在其接口上传入的大量邮件造成的,我需要对缓冲区和特定选项进行一些调整。
这是该错误的具体示例:
从源计算机上,如果我做一个小循环,每秒发送一个ID递增的消息(例如20、21、22、23、24等):
root@sm1u1050vmo /var/log: for ((i=20;i<100;i++)); do logger -p auth.notice "test auth notice $i" ; sleep 1 ; done
如果我在Syslog-NG(接收器)上尾随“ incoming.log”平面文件,我会看到许多丢失的消息:
[root@xm1p1034vmo 20]# tail -f incoming.log | grep sm1u1050vmo
Sep 20 12:27:32 sm1u1050vmo root: [ID 702911 auth.notice] test auth notice 28
Sep 20 12:27:34 sm1u1050vmo root: [ID 702911 auth.notice] test auth notice 30
Sep 20 12:27:37 sm1u1050vmo root: [ID 702911 auth.notice] test auth notice 33
Sep 20 12:27:42 sm1u1050vmo root: [ID 702911 auth.notice] test auth notice 38
Sep 20 12:27:43 sm1u1050vmo root: [ID 702911 auth.notice] test auth notice 39
Sep 20 12:27:52 sm1u1050vmo root: [ID 702911 auth.notice] test auth notice 48
我们可以清楚地看到许多消息丢失。
这是我配置的一小部分,带有选项和源:
options {
chain_hostnames(no);
log_msg_size(8192);
time_reopen(2);
create_dirs(yes);
use_dns(yes);
keep_hostname(yes);
stats_freq(3600);
flush_lines(1);
log_fifo_size(1000);
};
正在使用的来源:
source s_EXTERNAL {
network(transport("udp") log-fetch-limit(500));
};
用于过滤这些传入消息的“本地副本”目标:
destination d_INCOMING_ALL
{
file("/app/syslog-ng/logs/${YEAR}/${MONTH}/${DAY}/incoming.log" create-dirs(yes));
};
注意,我目前正在尝试在源代码中使用诸如 so-rcvbuf()之类的选项(并同时调整内核参数 rmem_max )。它是16Mb,我将其增加到64M,但目前没有任何改变。运行 netstat -us
时,我仍然看到 RcvbufErrors 和数据包接收错误不断增加的情况有任何提示吗?
谢谢
答案 0 :(得分:0)
我会告诉您一个UDP笑话,但您可能不会理解。严重地,不能保证UDP到达。在每一端将协议更改为TCP,应该进行设置。除了协议之外,如果您的系统以每秒1的速率丢弃邮件,则您的网络可能存在配置问题,或者只是过载。