以容错方式从多台服务器收集日志

以容错方式从多台服务器收集日志

我的主要要求是能够查看和搜索来自多台机器的日志。但是,我希望该解决方案对其余(核心)系统的影响最小。我没有任何实时要求,该过程可以是异步的。

最初,系统日志似乎是一个不错的选择,但如果系统日志服务器死机了怎么办?最坏的情况是核心系统的用户会看到错误,最好的情况下是一些日志丢失。

因此我开始四处寻找并找到了 Logstash(http://logstash.net/)目前我的想法是:

  • 每台服务器(运行系统核心组件)上都有一个 Logstash 代理在运行
  • 代理监视日志文件并将其发送到 ElasticSearch 集群
  • 还有另一台带有 Logstash UI 的服务器

那样:

  • 没有单点故障
  • 即使 ES 集群崩溃了,也只有代理会受到影响 - 应用程序仍然会顺利地将日志写入文件
  • ES 回来后,代理将(希望)赶上并发送所有待处理的日志(Logstash 是否足够智能来做到这一点?)

您认为这个方法可行吗?或者您可以推荐其他解决方案吗?

答案1

Rsyslog具有您描述的一些功能,并且项目还具有大量关于可靠消息转发的文档

简而言之,使用 rsyslog 你可以使用线性规划协议用于可靠的 syslog 消息转发,这样您就不必担心消息丢失。您还可以选择配置本地假脱机文件,如果远程服务器发生故障,rsyslog 将在其中缓冲消息。一旦远程服务器恢复,您的代理就会跟上。

您还可以选择配置 rsyslog 以写入关系数据库,然后可以根据需要使数据库冗余(我个人发现 syslog 服务器更容易集群)。

答案2

该问题很可能会被关闭,因为与主题无关,请参阅常见问题解答。

无论如何,系统日志(或任何基于系统日志的系统)都应该可以正常工作,毕竟,如果您担心丢失日志,那么请确保将系统日志服务器备份作为正常 DR 方案的一部分。这是一项非常简单的任务/请求。

相关内容