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

我的主要要求是能够查看和对多台机器组合的日志进行简单的search。 但是,我希望解决scheme对其他(核心)系统的影响最小。 我没有任何实时的要求,这个过程可以是asynchronous的。

最初系统日志似乎是一个很好的select,但如果系统日志服务器死亡呢? 在最坏的情况下,核心系统的用户会看到错误,最好的情况是某些日志丢失。

于是我开始环顾四周,发现Logstash( http://logstash.net/ )。 目前我的想法是:

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

那样:

  • 没有单一的失败点
  • 即使ES群集死亡,只有代理会受到影响 – 应用程序仍然乐于将日志写入文件
  • ES回来之后,代理将(希望)赶上并发送所有待处理的日志(Logstash足够聪明地这样做了吗?)

你认为这会起作用吗? 或者,也许你可以推荐其他解决scheme

Rsyslog有一些你正在描述的function,这个项目也有大量关于可靠的消息转发的文档 。

简而言之,通过rsyslog,您可以使用RELP协议进行可靠的系统日志消息转发,然后您不必担心信息丢失。 而且你也可以selectconfiguration本地假脱机文件,rsyslog将在远程服务器closures的情况下缓冲消息。 一旦遥控器回来,你的经纪人会赶上。

你也可以selectconfigurationrsyslog写入关系数据库,然后你可以使数据库尽可能多余(我个人发现一个syslog服务器更容易集群)。

这个问题很可能会被closures,请参阅常见问题解答。

无论如何,系统日志(或任何基于系统日志的系统)应该工作得很好,毕竟,如果您担心丢失日志,那么请确保备份系统日志服务器,作为正常灾难恢复scheme的一部分。 这是一个非常简单的任务/请求。