Docker 日志管理最佳实践!看这篇就够了!

本文详细介绍了Docker的日志类型,包括Docker引擎日志和容器日志,以及如何在生产环境中管理这些日志。Docker提供local、json-file、journald等日志驱动,每种驱动都有其特点和适用场景。在处理标准输出的日志时,可以选择Docker的日志驱动;而对于存在于容器内部的文本日志,提出了挂载目录、数据卷、计算容器rootfs挂载点等解决方案。
摘要由CSDN通过智能技术生成

 

 
Docker-CE
Server Version: 18.09.6
Storage Driver: overlay2
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: CentOS Linux 7 (Core)

Docker  日志分为两类:

  • Docker 引擎日志(也就是 dockerd 运行时的日志),
  • 容器的日志,容器内的服务产生的日志。

一 、Docker 引擎日志

Docker 引擎日志一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (CentOS 7, Ubuntu 16.04)。前者一般位于 /var/log/upstart/docker.log 下,后者我们一般 通过 journalctl -u docker 来进行查看。

 

preview

二、容器日志

2.1、常用查看日志命令——docker logs

docker logs CONTAINER 显示当前运行的容器的日志信息, UNIX 和 Linux 的命令有三种 输入输出,分别是 STDIN(标准输入)、STDOUT(标准输出)、STDERR(标准错误输出),docker logs  显示的内容包含 STOUT 和 STDERR。在生产环境,如果我们的应用输出到我们的日志文件里,所以我们在使用  docker  logs 一般收集不到太多重要的日志信息。

  • nginx 官方镜像,使用了一种方式,让日志输出到 STDOUT,也就是 创建一个符号链接/var/log/nginx/access.log/dev/stdout
  • httpd 使用的是 让其输出到指定文件 ,正常日志输出到 /proc/self/fd/1 (STDOUT) ,错误日志输出到 /proc/self/fd/2 (STDERR)。
  • 当日志量比较大的时候,我们使用 docker logs   来查看日志,会对 docker daemon 造成比较大的压力,容器导致容器创建慢等一系列问题。
  • 只有使用了 `local 、json-file、journald`  的日志驱动的容器才可以使用 docker logs 捕获日志,使用其他日志驱动无法使用 `docker logs`

2.2 、Docker 日志 驱动

Docker 提供了两种模式用于将消息从容器到日志驱动。

  • (默认)拒绝,阻塞从容器到容器驱动
  • 非阻塞传递,日志将储存在容器的缓冲区。
当缓冲区满,旧的日志将被丢弃。

在 mode 日志选项控制使用 blocking(默认) 或者 non-blocking, 当设置为 non-blocking需要设置 max-buffer-size 参数(默认为 1MB)。

支持的驱动

preview

使用 Docker-CE 版本,docker logs命令 仅仅适用于以下驱动程序(前面 docker logs 详解也提及到了)

  • local
  • json-file
  • journald

 

1558055133186

Docker 日志驱动常用命令

查看系统当前设置的日志驱动

docker  info |grep  "Logging Driver"  / docker info --format '{ {.LoggingDriver}}'

查看单个容器的设置的日志驱动

docker inspect  -f '{
  {.HostConfig.LogConfig.Type}}'   容器id

Docker 日志驱动全局配置更改

修改日志驱动,在配置文件 /etc/docker/daemon.json(注意该文件内容是 JSON 格式的)进行配置即可。

示例:

{ 
"log-driver": "syslog"
}

以上更改是针对所有的容器的日志驱动的。我们也可以单独为单一容器设置日志驱动。

Docker 单一容器日志驱动配置

在 运行容器的时候指定 日志驱动 --log-driver

docker  run  -itd --log-driver none alpine ash 
# 这里指定的日志驱动为 none 

日志驱动 一 、local

local 日志驱动 记录从容器的 STOUT/STDERR 的输出,并写到宿主机的磁盘。

默认情况下,local  日志驱动为每个容器保留 100MB 的日志信息,并启用自动压缩来保存。(经过测试,保留100MB 的日志是指没有经过压缩的日志)

local 日志驱动的储存位置 /var/lib/docker/containers/容器id/local-logs/container.log 命名。

local 驱动支持的选项

 

全局日志驱动设置为—local

在配置文件 /etc/docker/daemon.json(注意该文件内容是 JSON 格式的)进行配置即可。

{ 
"log-driver": "local",  
"log-opts": 
{   
"max-size": "10m" 
}
}

重启 docker  即可生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值