日志采集的必要性
容器中的日志,在容器销毁后会跟着容器一起消失,很多时候,程序报错导致的容器重启会带走之前的报错日志,只有通过ELK的形式将日志采集带外部,才可以进行追诉。
本次选用EFK来进行日志的采集,通过fluentd将日志直接发送到es中,然后对接到kibana展示。
日志采集过程
采集过程简单说就是利用 Fluentd 采集 Kubernetes 节点服务器的 “/var/log” 和 “/var/lib/docker/container” 两个目录下的日志信息,然后汇总到 ElasticSearch 集群中,再经过 Kibana 展示的一个过程。
具体日志收集过程如下所述:
- 创建 Fluentd 并且将 Kubernetes 节点服务器 log 目录挂载进容器;
- Fluentd 启动采集 log 目录下的 containers 里面的日志文件;
- Fluentd 将收集的日志转换成 JSON 格式;
- Fluentd 利用 Exception Plugin 检测日志是否为容器抛出的异常日志,是就将异常栈的多行日志合并;
- Fluentd 将换行多行日志 JSON 合并;
- Fluentd 使用 Kubernetes Metadata Plugin 检测出 Kubernetes 的 Metadata 数据进行过滤,如 Namespace、Pod Name等;
- Fluentd 使用 ElasticSearch 插件将整理完的 JSON 日志输出到 ElasticSearch 中;
- ElasticSearch 建立对应索引,持久化日志信息。
- Kibana 检索 ElasticSearch 中 Kubernetes 日志相关信息进行展示。
简单日志收集过程图
安装过程
准备 Fluentd 配置文件
详情请访问 Kubernetes Fluentd
Github地址:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch
配置文件分析
1 | kind: ConfigMap |
定制配置并调整参数
暂时不需要采集系统日志,把系统日志部分去掉
1 | kind: ConfigMap |
DaemonSet文件
1 | apiVersion: v1 |
将上面的两个yaml文件部署在kubernetes集群。
1 | kubectl apply -f fluentd.yaml |
Kibana 查看采集的日志信息
Kibana 设置索引
Kibana 中设置检索的索引
由于在 Fluentd 输出配置中配置了 “logstash_prefix kubernetes” 这个参数,所以索引是以 kubernetes 为前缀显示,如果未设置则默认为 “logstash” 为前缀。