#容器方便的同时带来的挑战
1. 如果日志还放在容器内部,会随着容器删除而删除
2. 容器多按照传统的仓库日志方式 显然不现实
#本身特性
1. 容器日志输出到控制台 本身docker提供了一种日志采集能力 如果落地到了本地文件 目前还没有一种比较好的动态采集方式
2. 新扩容的pod属性信息(日志文件路径 日志源 可能发生的变化)
#需要收集那些日志
1. k8s 系统组件日志 部署在k8s应用的日志
#当我们执行docker logs查看日志的时候是调用了docker守护进程去查看他接管的这个日志 在本地的文件系统中去读这个日志
#cd /var/lib/docker/找到容器ID进入里面 有一个已json文件已容器id命名的里面就是日志
#/var/lib/kubelet/pods/08ec113c8abdf4544
方案一:Node上部署一个日志收集程序
• DaemonSet方式部署日志收集程序
• 对本节点/var/log/kubelet/pods和
/var/lib/docker/containers/两个目录下的日志进
行采集
• Pod中容器日志目录挂载到宿主机统一目录上
方案二:Pod中附加专用日志收集的容器
• 每个运行应用程序的Pod中增加一个日志
收集容器,使用emtyDir共享日志目录让
日志收集程序读取到。
方案一:Node上部署一个日志收集程序 每个Node仅需部署一个日志收集程序,
资源消耗少,对应用无侵入 应用程序日志如果写到标准输出和标准错误输出,
那就不支持多行日志。
方案二:Pod中附加专用日志收集的容器 低耦合
每个Pod启动一个日志收集代理,增加资源消耗,
并增加运维维护成本
#匹配目录收集规则
方案(1):DaemonSet方式部署日志收集程序
/var/lib/docker/containers/*/*-json.log
/var/lib/kubelet/pods/*/volumes/kubermetes.io~emtpdir/
/var/lib/kubelet/pods/*/
方式2: 挂载到统一的目录 解决日志覆盖的方法 推荐方法让开发根据容器名称命名日志文件
保持唯一性就可以了 这种方法维护起来比较好 也比较简单 但是缺点可能消耗资源多一点
data:
kubernetes.yml: |-
- type: docker
containers.ids:
- "*"
https://www.cnblogs.com/Dev0ps/p/10778962.html
#传统日志配置采集工具重要设置什么
1. 日志路径
2. 写正则 格式化日志
3. 日志源(命名空间 容器 service 项目)
阿里云日志采集工具:log-pilot