可以使用syslog-ng进行远程日志logging来挂起我的应用

我希望每个服务器都将日志发送到/ var / log,并将其复制到远程syslog-ng服务器。 我听说轶事如何远程日志logging可以挂起你的应用程序,如果networking有问题。 我应该关心我的应用程序挂在远程login时,我将如何修复/解决它?

不可以。就其中之一而言,本地操作系统内的切换是asynchronous的。 系统日志库和本地系统日志守护进程将接受消息,但无法传递或失败,但无论如何,您的应用程序不会挂起。 其次,networking协议(默认情况下)是udp,所以即使您的应用程序阻塞,直到数据包发出,它会立即熄灭,并将控制权返回给您的应用程序,无论它是否真正将其传送到收集主机。

当人们认为远程日志挂在* nix的地方时,通常是因为它们正在login到nfs mount,这肯定会导致挂起。 系统日志,你很好。

类似于上面的bagster / growse和gparent的经验,在远程服务器不可用的情况下使用syslog-ng时,我也遇到了vsyslog()挂起(30到20米)的情况。

我会注意到,为了重现这一点,我不得不重新加载syslog-ng(服务syslog-ng重新加载),而远程服务器无法访问(我有效地禁用交换机的networking端口),我同时产生大量的stream量发送到远程服务器。

还要注意,我正在通过UDP进行日志logging,您希望这种方式可以避免非阻塞事件的发生。

我很乐观,我可以描述这个足够好,以提交一个对syslog-ng的错误,并会在这里更新,如果/当我这样做。

这确实可能发生 – 有很多情况下会发生这种locking,并且基本归结为系统日志队列或缓冲区已满,所以写入延迟。

这(通常)往往会使问题复杂化,因为事情开始失败,并希望发出尽可能多的信号,但需要等待系统日志接受他们的消息。

请注意,在这种情况下也有可能导致不正常行为的错误 – 特别是rsyslog在RH( https://bugzilla.redhat.com/show_bug.cgi?id=519203 )上引起了这个问题。 所以我肯定会build议检查您的软件版本与已知的错误。

此外,请检查您的系统日志的DNS设置 – 对于推出系统日志的客户端,我没有理由使用DNS的理由。 对于接收服务器, 如果您可以不使用DNS查找,那么可能值得尝试查看它是否有助于吞吐量。

幸运的是,还有一些修补程序(不是专门针对syslog-ng),但是您需要做出某种妥协,是简短的版本。

  1. 如果您可以容忍某些数据的丢失,则将日志logging切换到UDP是一种select。 显然,鉴于你所描述的问题,似乎几乎可以肯定的是,如果你这样做,你失去一些数据。

  2. 另一个select是对你通过networking发送的内容进行更多的select – 即过滤和/或优先化,一些stream过其他networking。 这有多大的帮助,部分取决于你select的系统日志实现中有哪些选项可用 – rsyslog有相当多的选项,其他我不太熟悉。

  3. 并不总是需要直接loginnetworking。 您可以考虑不这样做,而是使用某种日志加载/parsing代理(类似于https://www.elastic.co/products/logstash ) – 这样可以避免触摸正在工作的系统日志设置,同时仍然有远程日志logging(如果当前没有将数据存储到文件,也可以让代理在本地主机上侦听,并在本地转发系统日志数据)。

  4. 在类似的说明中,我会build议你检查你的审计政策,看看是否有什么可能导致问题。 值得注意的是,如果auditd正在logging到系统日志中,则使用“最佳实践”configuration(例如CIS基准testing)时,stream量甚至会(甚至尤其)很大。 我在几个领域看到了这个问题,在某些情况下,当audispd不能再把消息推送到系统日志时,它可能会被阻塞。

  5. 最后,对于像rsyslog这样的东西,你也可以使用磁盘和内存队列来缓解这些问题。 这需要一些设置(对于rsyslog,请参阅http://www.rsyslog.com/doc/v8-stable/concepts/queues.html ),但确实允许构build更多的容错设置,不要介意在这个问题上投入一些资源。

Rsyslog提供高性能设置指南( http://www.rsyslog.com/doc/v8-stable/examples/high_performance.html )和故障转移系统日志服务器( http://www.rsyslog.com/doc/v8 -stable / tutorials / failover_syslog_server.html )。 我肯定会推荐你至less调查中央日志服务器,以确保它能够处理日志量 – 然后调整(否则我已经有了很好的经验做这rsyslog,其中一个相当'标准'的接收器configuration无法跟上,但调整,使我们支持更多的数量级的stream量)。

另外,考虑更一般地检查你的日志configuration – 我从(悲伤的)经验中知道,人们可能倾向于启用TRACE或DEBUG日志并将其保留在开启状态,这通常也不会使系统日志(或系统更普遍)很多好处。

我知道这是一个旧的消息,但我会回答,如果其他人打这个网页。

我们已经看到远程日志logging使服务器挂起的情况。 系统日志,当失去networking访问他的日志主机,开始缓冲。 当缓冲区满时,它将停止从/dev/log文件中读取,即“完全”,使我们的审计失败,试图写入/dev/log