今天跟大家聊聊docker的日志!
Docker日志概念
如果时光可以倒流,现实世界的每一步都可以分解到最小,记录下来,就是日志。万物即日志。
面对历史,审视日志,可以选择忘却,也可以选择铭记;经历过的,可以选择珍藏,同样也可以让它尘封。
Docker 容器又何尝不是?日志就像一根时间轴,你在或者不在,他都在那。有人对其善意,有人却对其随意。如若不信,可以回忆,自己是否善待 Docker 容器的日志
-
传统应用的日志
- stdout标准输出日志
- 通过log4j等工具直接写入硬盘的日志
-
Docker 时代的日志
所有的容器通过Docker Daemon启动,实际上属于Docker的一个子进程, 它可以拿到你的容器里面进程的标准输出,然后拿到标准输出之后,会通过它自身的一个叫做LogDriver的模块来处理,LogDriver就是Docker用来处理容器标准输出的一个模块。 Docker支持很多种不同的处理方式,比如你的标准输出之后,在某一种情况下会把它写到一个日志里面。
-
Docker日志如何使用
-
项目中使用log4j等工具写入到容器中某个目录,然后通过启动启动时候去挂载到主机目录,这是一种常见的使用手段(本文不探讨这种方式)
-
项目中所有日志stdout标准输出,此时我们利用Docker的日志系统去收集日志
-
如何查看Docker日志?
可以通过docker logs containerID
命令查看容器的日志
$ docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
下列为Docker常用的一些日志命令:
- 查看指定时间后的日志,只显示最后10行:
$ docker logs -f -t --since="2021-04-01" --tail=10 CONTAINER_ID
- 查看最近30分钟的日志:
$ docker logs --since 30m CONTAINER_ID
- 查看某时间之后的日志:
$ docker logs -t --since="2021-04-01T13:23:37" CONTAINER_ID
- 查看某时间段日志:
$ docker logs -t --since="2021-04-01T13:23:37" --until "2021-04-01T16:23:37" CONTAINER_ID
Docker日志存储在哪里?
Dcoker默认的存储目录在 /var/lib/docker下,我们可以通过修改命令修改存储目录:
vim /etc/docker/daemon.json
#修改到/opt目录下
{
"data-root": "/opt/docker"
}
查看某个容器的日志目录在哪里:
$ docker inspect -f {{".LogPath"}} CONTAINER_ID
/var/lib/docker/containers/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad-json.log
/var/lib/docker/containers: 默认容器存储地址 2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad:容器id 2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad-json.log:容器的日志文件,格式为默认的json-file
Docker日志驱动分类
- 驱动类型选择
选项 | 描述 |
---|---|
none | 不使用日志 |
local | 自定义日志驱动 |
json-file | 默认json存储的日志 |
syslog | 日志写入到指定的syslog地址 |
journald | 日志写入到指定jounald |
fluentd | 日志写入到指定fluentd服务 |
awslogs | 日志发送到指定的Amazon CloudWatch Logs |
splunk | 日志发送到指定的splunk服务 |
gcplogs | 日志发送到Google Cloud日志系统 |
logentries | 日志发送到Rapid7 Logentries |
-
如何使用驱动?
-
修改Docker Daemon, 这样会对所有容器生效, fluentd:
dockerd --log-driver=fluentd --log-opt fluentd-address=192.168.0.133:24224
-
在容器启动时加上配置项, 这样配置只会对当前容器生效:
docker run --log-driver=fluentd --log-opt fluentd-address=192.168.0.133:24224 nginx
-
结束
下篇讲解Docker-Swarm如何在微服务项目中使用!
欢迎关注公众号! 公众号回复:
入群
,扫码加入我们交流群!