filebeat收集不上k8s日志排查小记
背景:在一个k8s集群上,以daemonset的方式部署的filebeat,收集k8s各节点运行容器的日志。发现其中有一个宿主机节点的日志无法被收集上来,其他节点日志收集正常。排查:1. Filebeat运行的POD状态为Running状态。2. 查看该filebeat运行日志,无异常信息。3. 登录该异常的宿主机节点,进入filebeat配置文件配置的收集容器日志的目录,存在日志文件。似乎看起来
背景:
在一个k8s集群上,以daemonset的方式部署的filebeat,收集k8s各节点运行容器的日志。发现其中有一个宿主机节点的日志无法被收集上来,其他节点日志收集正常。
排查:
1. Filebeat运行的POD状态为Running状态。
2. 查看该filebeat运行日志,无异常信息。
3. 登录该异常的宿主机节点,进入filebeat配置文件配置的收集容器日志的目录,存在日志文件。
似乎看起来都正常。
再仔细看filebeat运行日志,在harvester相关的日志条目中,没有容器日志的目录。
同事找到了相关的文章,记一次EFK采集不到k8s日志数据的解决过程 - 代码天地。
此文章出现问题的原因和我们的情况相似,但没有具体分析root cause。我来展开分析一下root cause:
filebeat pod挂载的容器Volume映射到宿主机上默认是/var/lib/docker/containers,而该k8s节点安装的docker不按标准的方式,放在了另外一个位置,导致宿主机的该目录,没有被挂载到filebeat pod中。而filebeat在pod收集的日志文件,需要通过软链接的方式,指向到/var/lib/docker/containers目录中。结果,在pod中,该软链接指向到了一个不存在的文件。尽管,在宿主机中,此软链接能正常指向。
兼容解决办法:
在filebeat的daemonset yaml配置文件中,添加该特殊目录至volumes和volumeMounts中。
更多推荐
所有评论(0)