Syslog-NG中丢失的消息 - 缓冲区配置?

问题描述 投票:0回答:1

我正在使用Syslog-NG 3.8作为系统日志服务器接收来自许多不同来源的消息,大约400台服务器(并过滤它们并最终转发到splunk服务器)。

但是,看起来很多邮件在被过滤并转发到splunk实例之前就被“删除”了。

我有一个配置,我在平面文件中过滤之前跟踪“传入”消息,我在那里看不到一些消息(见下面的例子),而我可以在运行tcpdump时成功看到tcp跟踪,这意味着Syslog-NG在“源”机制中“丢弃”消息。

我怀疑这是由于其接口上传入的大量消息,我需要使用缓冲区和特定选项进行一些调整。

这是一个bug的具体例子:

从源机器,如果我做一个小循环每秒发送一个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和数据包接收错误增加

有什么提示吗?

谢谢

syslog syslog-ng
1个回答
0
投票

我会告诉你一个UDP笑话,但你可能不会得到它。说真的,UDP无法保证到达。在每端将协议更改为TCP,您应该设置。除了协议之外,如果您的系统以每秒1的速率丢弃消息,您的网络上可能存在配置问题,或者它只是过载。

© www.soinside.com 2019 - 2024. All rights reserved.