Syslog 与 Logstash 的连接未重置

Syslog 与 Logstash 的连接未重置

我们设置了一个 Logstash 服务器(1.4.2,使用嵌入式 Elasticsearch),用于从多个其他客户端(通过 TCP 和它们的rsyslogd实例)接收日志。现在反复发生的一个问题是,不再收到来自主机的逐条消息,但是却看不到任何错误消息。

基本上看起来 Logstash 主机无法处理大量传入消息,并且连接处于一种奇怪的状态;我在客户端实例上做了lsof/并且还在客户端和服务器上捕获了一些流量,并且似乎客户端仍然打开着连接:stracersyslogd

rsyslogd 30088 syslog    1u  IPv4           14878202       0t0        TCP 10.129.X.X:47492->10.129.X.X:5544 (ESTABLISHED)

,由于服务器(端口5544)发送 TCP 零窗口消息,该连接基本上已断开,正如Wireshark 告诉我,基本上是 Logstash 没有跟上(主机上的 CPU 使用率并不总是最大,而是在所有四个核心上定期保持在 75% 左右)。

我的问题是:在这种情况下,是否有标志/设置/...可以让rsyslogd守护进程退出/重新连接,或者如果 Logstash 无法跟上,它可以正确关闭连接?(这是一个已知问题吗?因为我找不到任何相关链接。)

编辑:与此同时,我们已将输入插件改为,这与手动解析相结合tcp,似乎可以更好地处理负载。不过,我仍然想了解原始问题。sysloggrok

答案1

这些是您正在寻找的参数:

Action.ResumeInterval="30"
Action.ResumeRetryCount="-1"

这里你可以找到所有可用的参数

这是通用 rs 的示例:

ruleset(name="myruleset_name"){
    action(
    type="omfwd"
    Target="destination_fqdn_ip"
    Port="destination_port"
    Protocol="tcp"
    Action.ResumeInterval="30"
    Action.ResumeRetryCount="-1"
    )
    stop
}

请注意,问题实际上取决于 dst:logstash 服务器无法应对传入负载(rsyslog 输出),因此您应该仔细查看 dst 服务器。反复出现的 TCP 零窗口是一个巨大的问题,因为它可能导致数据丢失(缓冲区开销)、数据高峰和低谷、数据不实时等。

希望有所帮助。

相关内容