k8s-日志落地

#容器方便的同时带来的挑战

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

你可能感兴趣的:(k8s-日志落地)