暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker容器日志的种类以及存储

须弥零一 2021-05-27
1086

须弥零一

Docker容器日志的种类以及存储

作者: Yisany
原文: https://www.cnblogs.com/yisany/p/13725504.html

Docker 日志#

Docker的日志可以分为两类:

stdout标准输出日志
stdout就是标准输出里面的日志, 比如程序运行时输出在控制台的内容就会写入标准输出
原理就是当在启动进程的时候,进程之间有一个父子关系,父进程可以拿到子进程的标准输出
文件日志
直接写入磁盘的日志, 例如java使用log4j框架直接将日志落盘(不在控制台输出)就是典型的文件日志

所有的容器通过Docker Daemon启动,实际上属于Docker的一个子进程, 它可以拿到你的容器里面进程的标准输出,然后拿到标准输出之后,会通过它自身的一个叫做 LogDriver 的模块来处理.
LogDriver就是Docker用来处理容器标准输出的一个模块。Docker支持很多种不同的处理方式,比如你的标准输出之后,在某一种情况下会把它写到一个日志里面.

1. 查看日志

可以通过 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分钟)

例子:

查看指定时间后的日志,只显示最后100行:

$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

查看最近30分钟的日志:

$ docker logs --since 30m CONTAINER_ID

查看某时间之后的日志:

$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

查看某时间段日志:

$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID

2. 日志在哪?

日志一般都会落盘在宿主机的 /var/lib/docker
 文件夹下, 具体的信息可以通过 docker inspect
 命令查看:
$ docker inspect [OPTIONS] CONTAINER

例如:

$ docker inspect -f {{".LogPath"}} 2be

输出:

/data/docker/containers/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad-json.log

这就是这个容器的日志记录文件了

日志文件相关信息 

日志记录系统一般都可以对日志文件进行拆分, 比如按日期, 按大小等.在Docker的日志记录系统下也是可以实现的, 默认情况下一个容器会产生一个日志文件, 没有大小限制, 不会根据日期拆分, 即从容器启动到容器销毁, 日志文件永远是那一个.
也可以通过一些配置项进行配置, 例如 json-file
 模式:
选项描述示例值
max-size
日志文件的最大大小, 默认为-1(无限制)--log-opt max-size=10m
max-file
可以存在的最大日志文件数。如果滚动日志会创建多余的文件,则会删除最早的文件。仅在max-size
设置时有效。一个正整数。默认为1。
--log-opt max-file=3
labels
在启动Docker守护程序时适用。该守护程序接受的与日志记录相关的标签的逗号分隔列表。用于高级日志标签选项。--log-opt labels=production_status,geo
env
在启动Docker守护程序时适用。该守护程序接受的与日志相关的环境变量的逗号分隔列表。用于高级日志标签选项。--log-opt env=os,customer
env-regex
与相似并兼容env
。用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标签选项。
--log-opt env-regex=^(os|customer).
compress
切换旋转日志的压缩。默认值为disabled
--log-opt compress=true

3. 配置LogDriver

Docker官方目前支持这些log driver, 默认使用的是json-file
模式:
DriverDescription
none
丢弃容器输出
local
日志以自定义格式存储
json-file
日志存储格式为json, 默认的logdriver驱动
syslog
日志写入到指定的syslog地址
journald
日志写入到指定jounald
gelf
以gelf格式发送日志
fluentd
日志发送到指定的fluentd服务
awslogs
日志发送到指定的Amazon CloudWatch Logs
splunk
日志发送到指定的splunk服务
etwlogs
日志发送到Event Tracing for Windows, 仅支持windows平台
gcplogs
日志发送到Google Cloud日志系统
logentries
日志发送到Rapid7 Logentries
有两种方法可以修改docker的LogDriver

修改Docker Daemon, 这样会对所有容器生效, 以syslog为例:

dockerd --log-driver=syslog --log-opt syslog-address=127.0.0.1:514

在容器启动时加上配置项, 这样配置只会对当前容器生效:

docker run --log-driver=syslog --log-opt syslog-address=127.0.0.1:514 nginx:laster
除了上述的这些logdriver, 也可以自定义logdriver, 并且通过docker plugin install
进行安装, 详情可见: https://docs.docker.com/config/containers/logging/plugins/


---- END ----



欢迎关注我的公众号“须弥零一”,更多技术文章第一时间推送。


文章转载自须弥零一,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论