kubernetes日志管理最佳实践EFK

一、kubernetes和docker都有哪些日志

  • 以上日志都是默认日志,对日志不进行配置就这样

  • kubectl logs和docker logs一样的,都是查看容器内部应用的日志

  • 对于容器内部应用产生stdout和stderr日志一定会被引擎拦截,如果在应用中通过代码把日志保存到容器内部,那么会产生两份日志;一份原生的日志(代码生成在项目中),一份经过加工过的日志比如json-file保存在/var/lib/docker/containers/<容器>/<容器>.log中。

二、kubernetes日志管理最佳实践EFK(采集)

kubernetes efk三大组件配方

其实只需要安装fluentd-es到你的k8s集群即可,完全可以将elasticsearch和kibana单独部署,如果有票子可以直接买云厂商现成的,需要的修改fluentd-es的configMap中output:

参考 www.cnblogs.com/cocowool/p/…

三、问题排查

1、fluentd-es缓冲区

查看fluentd-es pod日志文件,有个[warn]

我们看采集具体流程

我们可以修改fluentd-es configMap配置文件中的buffer.chunk_limit_size

如果出现缓冲区出现大量未处理的日志,那么一定是elasticsearch有性能瓶颈,不能实时获取最新的日志文件,需要优化一下elasticsearch

2、fluentd-es pod重复拉去自身的日志

查看fluentd-es pod日志文件,有好多[warn] 我们发现其中出现了很多了\\\这种转义字符,大概可以猜到应该是该日志文件经过多次采集,为什么会采集多次呢?我们仔细看该条日志记录的是

也就是fluentd-es自身的日志。fluentd-es先采集自己的日志,然后把采集自己的日志又写在自己的日志上,就这样循环下去,直到内存溢出,pod挂了。 我们需要继续修改fluentd-es configMap,通过exclude_path把这个日志文件排除了 :

3、云厂商elasticsearch

查看fluentd-es pod日志文件,有好多[warn]

一般云厂商提供的elasticsearch套件是不开启允许自动创建索引功能的,需要开启。

4、排查所有问题

将@log_level设置为debug

然后,查看fluentd-es pod日志文件,根据debug提示修复。

四、fluentd-es configMap demo

DeamonSet

Last updated

Was this helpful?