一、ELK架构¶
在传统架构中,比较成熟且流行的日志收集平台非ELK(Elasticsearch + Logstash + Kibana)莫属,其中Logstash负责采集日志,并输出至Elasticsearch,之后用Kibana进行展示。
缺点:
Logstash占用资源大,语法复杂
二、EFK架构¶
由于Logstash比较“重”,并且配置稍微有些复杂,所以出现了EFK的日志收集解决方案。相对于ELK中Logstash,Fluentd采用“一锅端”的形式,可以直接将某些日志文件中的内容存储至Elasticsearch,然后通过Kibana进行展示。其中Fluentd只能收集控制台日志(使用logs命令查出来的日志),不能收集非控制台日志,不能很好的满足生产环境的需求。大部分情况下,没有遵循云原生理念开发的程序,往往都会输出很多日志文件,这些容器内的日志无法采集,除非在每个Pod内添加一个Sidecar,将日志文件的内容进行tail -f转成控制台日志,但这也是非常麻烦的。
另外,用来存储日志的Elasticsearch集群是不建议搭建在Kubernetes集群中的,因为会非常浪费Kubernetes集群资源,所以大部分情况下通过Fluentd采集日志输出到外部的Elasticsearch集群中。
优点: Fluentd占用资源小,语法简单
缺点:
Fluentd只能收集控制台日志(使用logs命令查出来的日志),不能收集非控制台日志,不能很好的满足生产环境的需求;
依赖Elasticsearch,维护难度和资源使用都是偏高;

1.在k8s集群的每个node节点上起一个Fluentd的Pod,Fluentd配置一个类型为HostPath的volume,将宿主机的文件目录挂载到容器中。 2.Fluentd容器根据语法读到宿主机的日志文件。 3.Fluentd容器把读取到的日志文件打包给ES集群