作者: 耗子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 | --log-opt max-size=[0-9+][k|m|g] |
例如:
–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 |