能否高效地通过网络传输日志?

能否高效地通过网络传输日志?

我想在中央服务器上积累日志。在 Google 中输入适当的关键字,我就会找到各种复杂的工具,如 fluentd 和 elk - 但我不想聚合日志并提供分析,我只想尽可能快速、高效和可靠地将它们从原始服务器上获取。

通过记录器管道传输流输出使我能够将数据传输为系统日志 - 但这意味着 UDP(不可靠)并且我看不到如何在日志主机上对来自多个服务器的数据进行解复用。

通过 netcat 传输数据使得使用 TCP 变得更加容易,因此应该可以构建某种高可用性功能,并且这比将每个日志条目作为 http 请求发送的开销更小,但这感觉有点临时且过于简约。

除了安全性方面,将日志写入 NFS 共享还有很多好处 - 日志条目的来源对日志文件有太多控制权。而且,由于 nfs4 不是一种选择,因此很难实现高可用性。

有谁有更好的、更强大且有效的解决方案吗?

(所有日志均来自 Linux 上的应用程序/单个日志条目可能有多行)

答案1

您的操作系统是什么?大多数发行版都包含 rsyslog 守护程序,并且具有通过 UDP、TCP 和 RELP(可靠事件日志协议)转发的内置功能。

正如您已经提到的,您不喜欢 UDP 的可靠性;请考虑 TCP 或 RELP。

我不知道如何在日志主机上对来自多个服务器的数据进行解复用

如果我理解你在这里问的问题,答案是在输出目录中使用一个使用发送方主机名的模板。(并且按日期索引,以便更容易使旧文件过期。)你最终会得到类似的东西;

/var/log/loghost/$yyyy/$MM/$dd/$hostname/messages

对于应用程序日志,您可以使用 rsyslog 的输入文件模块读取它们。(imfile)

维护者的网站上有一些很棒的烹饪书/示例。你似乎只需要指出正确的方向,所以我没有说得太具体。如果你遇到困难,我会从这里开始,然后再回来问更具体的问题。

https://www.rsyslog.com/

相关内容