前言
很多企业内部都有自己的ElasticSearch集群,我们没有必要在kubernetes集群内部再部署一个,而且这样还难于管理,因此我们考虑在容器里部署logstash收集日志到已有的ElasticSearch集群中。
方案选择
Kubernetes官方提供了EFK的日志收集解决方案,但是这种方案并不适合所有的业务场景,它本身就有一些局限性,例如:
所有日志都必须是out前台输出,真实业务场景中无法保证所有日志都在前台输出
只能有一个日志输出文件,而真实业务场景中往往有多个日志输出文件
Fluentd并不是常用的日志收集工具,我们更习惯用logstash
我们已经有自己的ELK集群且有专人维护,没有必要再在kubernetes上做一个日志收集服务
基于以上几个原因,我们决定使用自己的ELK集群。
Kubernetes集群中的日志收集解决方案
编号
方案
优点
缺点
1
每个app的镜像中都集成日志收集组件
部署方便,kubernetes的yaml文件无须特别配置,可以为每个app自定义日志收集配置
强耦合,不方便应用和日志收集组件升级和维护且会导致镜像过大
2
单独创建一个日志收集组件跟app的容器一起运行在同一个pod中
低耦合,扩展性强,方便维护和升级
需要对kubernetes的yaml文件进行单独配置,略显繁琐
3
将所有的Pod的日志都挂载到宿主机上,每台主机上单独起一个日志收集Pod
完全解耦&