【发布时间】:2018-09-20 10:35:49
【问题描述】:
我使用 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 和 数据包接收错误 增加有什么提示吗?
谢谢
【问题讨论】:
-
有些事情我不清楚,当你发送那 100 条消息时,还有其他流量吗?很高兴看到源和目标是如何连接的?你在使用流量控制吗? log_fifo_size(1000) 声明 syslog-ng 一次可以容纳 1000 个,基于