我的主要要求是能够查看和搜索来自多台机器的日志。但是,我希望该解决方案对其余(核心)系统的影响最小。我没有任何实时要求,该过程可以是异步的。
最初,系统日志似乎是一个不错的选择,但如果系统日志服务器死机了怎么办?最坏的情况是核心系统的用户会看到错误,最好的情况下是一些日志丢失。
因此我开始四处寻找并找到了 Logstash(http://logstash.net/)目前我的想法是:
- 每台服务器(运行系统核心组件)上都有一个 Logstash 代理在运行
- 代理监视日志文件并将其发送到 ElasticSearch 集群
- 还有另一台带有 Logstash UI 的服务器
那样:
- 没有单点故障
- 即使 ES 集群崩溃了,也只有代理会受到影响 - 应用程序仍然会顺利地将日志写入文件
- ES 回来后,代理将(希望)赶上并发送所有待处理的日志(Logstash 是否足够智能来做到这一点?)
您认为这个方法可行吗?或者您可以推荐其他解决方案吗?
答案1
Rsyslog具有您描述的一些功能,并且项目还具有大量关于可靠消息转发的文档。
简而言之,使用 rsyslog 你可以使用线性规划协议用于可靠的 syslog 消息转发,这样您就不必担心消息丢失。您还可以选择配置本地假脱机文件,如果远程服务器发生故障,rsyslog 将在其中缓冲消息。一旦远程服务器恢复,您的代理就会跟上。
您还可以选择配置 rsyslog 以写入关系数据库,然后可以根据需要使数据库冗余(我个人发现 syslog 服务器更容易集群)。
答案2
该问题很可能会被关闭,因为与主题无关,请参阅常见问题解答。
无论如何,系统日志(或任何基于系统日志的系统)都应该可以正常工作,毕竟,如果您担心丢失日志,那么请确保将系统日志服务器备份作为正常 DR 方案的一部分。这是一项非常简单的任务/请求。