带弹性堆栈的Kubernetes / Docker中可靠的集中式日志logging

我们正在CoreOS上build立一个Kubernetes集群来运行50多个不同的应用程序(主要是Java应用程序),每个应用程序都可能以自己的格式生成日志。

我们正在寻求使用Elastic Stack (以前称为ELK堆栈) 集中来自所有容器的日志 ,并具有一些特定的要求:

  1. 面对networking,容器或节点故障的可靠性
  2. 每个日志语句都经过一次处理 。 即使发生故障,解决scheme也必须记住停止的位置,并且应该继续从此时开始调度日志,一旦恢复健康状态。
  3. 在pod / replication控制器的configuration中configuration日志grokking模式 。 我们希望避免在集中的通用元素(例如Logstash)中configuration特定于应用程序的模式。

我们提出的解决scheme是使用:

  1. Logspout消耗Docker日志 – 将它们转发到本地…
  2. rsyslog守护进程(例如syslog://localhost:514 ),这将转发他们到一个…
  3. Logstash实例在集群中运行并通过Kubernetes服务公开。
  4. Logstash会根据容器ID过滤和转换日志文件,并将结果发送给Elasticsearch。

这个解决scheme可靠吗? 这个解决scheme似乎覆盖了我们所有的要求,除了#3(与应用程序一起的grokking模式)。

你有什么build议吗? 我们愿意使用Filebeat,fluentd或其他组件。