进入容器时代,日志收集这个事情需要好好梳理一下。
一、容器日志收集的难点是什么?
![fc5b58b17d8011478fee2f16c747d2a9.png](https://img-blog.csdnimg.cn/img_convert/fc5b58b17d8011478fee2f16c747d2a9.png)
第一、容器是无状态的,删除容器,容器所有的东西都会没有了,所以容器内部肯定不能存放日志。
第二、docker 本身提供了日志驱动,默认输出文件,可以配置fluentd驱动输出,还有一些系统级的syslog驱动,用宿主机syslog收集,还有一些商业化的软件驱动输出,应该怎么配合k8s进行日志处理?
第三、怎么收集,是每个pod装一个agent,还是直接开发日志直接输出到elk,还是其他商业化的解决方案?
第四、如果采用docker默认的文件输出方案,如果容器不是频繁构建的容器,那日志越来越大怎么处理?
我这边说一个k8s官方推荐的方案:
采用按照node节点方式来收集日志,中小型企业其实都推荐采用以node节点为主的日志收集方案。
使用docker默认的文件输出方案,每个节点以daemonset方式启动一个logrotate,挂在容器目录/var/lib/docker/containers/,每天做一个或者每几个小时做一次切割,保留是十个文件,节省服务器的存储空间,也可以保证日志不会无限制的追加下去,
每个节点以daemonset方式启动一个fluentd,挂载容器/var/lib/docker/containers/,使用tail方式收集/var/lib/docker/containers/*/*-json.log这个文件。
下一篇说一下具体用helm部署fluentd + elasticsearch + kibana方案部署