0%

Docker容器log功能分析


作者: 耗子007


日志驱动

Driver Description
none Disables any logging for the container. docker logs won’t be available with this driver.
json-file Default logging driver for Docker. Writes JSON messages to file.
syslog Syslog logging driver for Docker. Writes log messages to syslog.
journald Journald logging driver for Docker. Writes log messages to journald.
gelf Graylog Extended Log Format logging driver for Docker. Writes log messages to a GELF endpoint like Graylog or Logstash.
fluentd Fluentd logging driver for Docker. Writes log messages to fluentd (forward input).
awslogs Amazon CloudWatch Logs logging driver for Docker. Writes log messages to Amazon CloudWatch Logs.
splunk Splunk logging driver for Docker. Writes log messages to splunk using HTTP Event Collector.
etwlogs ETW logging driver for Docker on Windows. Writes log messages as ETW events.
gcplogs Google Cloud Logging driver for Docker. Writes log messages to Google Cloud Logging.

在daemon启动的时候可以配置日志驱动,命令如下:

1
docker daemon --log-driver=json-file --log-opt=map[]

默认的驱动是json-file,可配置选项通过log-opt设置。
log-opt可选项如下:

1
2
3
4
--log-opt max-size=[0-9+][k|m|g]
--log-opt max-file=[0-9+]
--log-opt labels=label1,label2
--log-opt env=env1,env2

例如:
–log-opt max-size=2m限定日志文件的大小为2MB
–log-opt max-file=7限定日志文件最多7个
当日志文件超过2MB是,会写到第二个日志文件,如果日志文件超过7个时,会覆盖之前的日志文件。

容器日志

容器日志是容器在运行过程中产生的日志,默认会保存到/var/lib/docker/containers/CID/CID-json.log文件中。
可以用下面命令读取易读的日志:

1
$ docker logs CID

日志处理流程图如下:
日志流程图

syslog驱动设置容器日志到单个日志文件

syslog驱动时,默认容器的日志都是输出到/var/log/messages文件中的,当需要把容器日志单独保存时,可以通过一些小办法实现。
步骤如下:

  • 设置容器日志的facility为一个特定值保证其他应用不会使用,例如:local5
  • 配置一下rsyslog.cfg就好了,把local5的日志指定到一个文件中,例如:
1
local5.*						 /var/log/mydocker.log

Daemon挂掉时容器日志处理流程

当daemon挂掉时,容器的日志会缓存到上图的fifo中,fifo的默认大小是1M,可以通过如下命令获取:

1
$ cat /proc/sys/fs/pipe-max-size