日志对于我们管理 Kubernetes 集群及其上的应用具有非常重要的作用,特别是在出现故障或者 Bug 的时候。如果你能回答下面几个问题,那么可以不用再看本文了,如果不能回答,本文可能正好适合你。•Docker 都会产生哪些日志?•Docker 产生的日志都放在哪里?•Docker 的日志的分割、清理策略默认为什么?•如何配置 Docker 日志的分割、清理策略?•Kubernetes 都会产生哪些日志?•Kubernetes 产生的日志都存放在那里?•如何集中管理 Kubernetes 产生的日志?1.Docker 的日志处理方案Docker 产生的日志有两类:•一类是 Docker 引擎日志。Docker 引擎日志在不同的操作系统下管理方式不一样,在 Centos 中是通过 journalctl 来进行管理。•一类是容器日志。容器中的应用产生的日志默认都输出到 stdout 和 stderr 中,可以通过 dockerlogs 来访问。Docker 为容器日志提供了多种实现机制称为loggingdriver。通过 dockerinfo 可以查看本机使用的 loggingdriver,默认为json-file 形式,这种形式下每个容器的日志默认以 json 格式存储在/var/lib/docker/containers/<容器 id>/<容器 id>-json.log 下。下面两种情况使用 dockerlogs 看不到什么有用的信息:o 容器内的应用不是交互式应用,而是实现了自己的日志输出,例如对于Apache、Nginx 等 Web 服务,通常会将访问日志和错误日志记录到不同的文件,而不是打到标准输出和错误输出。o 使用不同的 loggingdriver 将日志送到了文件、外部服务器、数据库等集中的日志后台。Docker 目前支持的 loggingdriver 类型:•none•json-file•syslog•journald•gelf•fluentd•awslogs•splunk•etwlogs1-30 志分割策略配置•gcplogs•logentries1.1 配置 loggingdriver运行容器时,可以通过命令行参数指定 loggingdriver 的类型。bogon:logrousseau$dockerrun-it--log-drivernonealpinesh/#ls#切换一个终端bogon:logrousseau$dockerpsCONTAINERIIMAGECOMMANDCREATEDSTATUSPORTSNAMES8ec61e8feb61alpine"sh"13secondsagoUp12secondsxenodochial_ptolemybogon:logrousseau$dockerlogs8ec61e8feb61Errorresponsefromdaemon:configuredloggingdriverdoesnotsupportreadingbogon:logrousseau$dockerinspect-f'{{.HostConfig.LogConfig.Type}}'8ec61e8feb61none对于日志输出到文件的应用可以通过软连接的方式将日志输出到标准输出和准错误输出。例女如 Theoff...