我们正在CoreOS 上建立一个 Kubernetes集群,以运行50多个不同的应用程序(主要是Java应用程序),每个应用程序都可能以自己的格式生成日志。
我们希望使用 Elastic Stack (以前的ELK堆栈)从所有容器中集中日志,并满足一些特定要求:< / p>
面对网络,容器或节点故障时,- 可靠性。
每个日志语句的- 完全一次处理。即使发生了故障,解决方案也必须记住它停止的位置,并且应该继续从该点开始调度日志,一旦恢复正常。
- 在pod /复制控制器的配置中配置日志grokking模式。我们希望避免在集中的公共元素(例如Logstash)中配置特定于应用程序的模式。
醇>
我们提出的解决方案是使用:
- Logspout使用Docker日志 - 将它们转发到本地...
- rsyslog守护程序(例如
syslog://localhost:514
),会将它们转发给...
- Logstash实例在集群中运行并通过Kubernetes服务公开。
- Logstash会根据容器ID过滤和转换日志文件,并将结果发送给Elasticsearch。
醇>
这个解决方案是否可靠?这个解决方案似乎涵盖了我们的所有要求,除了#3(应用程序旁边的grokking模式)。
你有什么建议吗?我们愿意使用Filebeat,流利或其他组件。