日志管理
1.查看容器日志
默认情况下, 执行docker logs <CONTAINER ID>
可以看到一个容器的输入日志.其中包括STDOUT
标准输出和STDERR
标准错误输出.但是在有些情况下, 你可能无法查看到一些有用的信息.比如:
- 如果你在容器中,将文件记录到某个文件,外部服务或者数据库中去.那么信息将无法通过标准输出和标准错误输出进行打印,自然也没法通过
docker logs
查看到. - 如果你的容器运行着一个非交互式进程(如WEB服务器或者数据库),该应用程序可能会将其输出发送到日志文件中去.
第一种情况下,你的日志可以通过其他方式进行处理,你可以不选择使用docker的日志模式输出.第二种情况下,一些官方的镜像解决了这个问题,比如nginx的官方镜像把/var/log/nginx/access.log软连接到了/dev/stdout
设备上,并且把/var/log/nginx/error.log同时软连接到而来/dev/stderr
设备上.官方的httpd服务则直接将标准输出,错误输出写到相应的设备上.
2.配置日志驱动程序
Docker包含多个记录机制,可帮助您从运行容器和服务中获取信息。这些机制称为日志记录驱动程序。
每个Docker守护程序都有一个默认的日志记录驱动程序,每个容器都使用它,除非您将其配置为使用其他日志驱动程序。
配置docker默认的日志记录驱动程序, 通过--log-driver=<VALUE>
,在dockerd启动的使用指定。
又或者指定某个容器的日志驱动程序,通过--log-driver=<VALUE>
来启动容器,通过--log-opt <NAME>=<VALUE>
来指定相关参数
支持的日志驱动格式如下:
驱动 | 解释 |
---|---|
none | 容器中不会有日志,docker logs不会返回任何输出。 |
json-file | 日志格式为JSON。Docker的默认日志记录驱动程序。 |
syslog | 将记录消息写入syslog设备。该syslog守护程序必须在主机上运行。 |
journald | 将日志消息写入journald。该journald守护程序必须在主机上运行。 |
gelf | 将日志消息写入Graylog扩展日志格式(GELF)端点,如Graylog或Logstash。 |
fluentd | 将日志消息写入fluentd(正向输入)。该fluentd守护程序必须在主机上运行。 |
awslogs | 将日志消息写入Amazon CloudWatch日志。 |
splunk | 将日志消息写入splunk使用HTTP事件收集器。 |
etwlogs | 将日志消息写入Windows事件跟踪(ETW)事件。仅在Windows平台上可用。 |
gcplogs | 将日志消息写入Google Cloud Platform(GCP)日志记录。 |
docker logs命令不适用于比其他驱动程序json-file 和journald。
3.使用相关的日志驱动
你可以通过打印日志的时候加入对应标签或者环境变量
所有驱动程序共有的一些选项:
这些选项仅适用于Docker CE Edge版本
驱动 | 解释 | 示例 |
---|---|---|
mode | 设置日志记录模式,接受的值为blocking(默认)和non-blocking。何时non-blocking设置,如果日志缓冲区填满,日志消息将丢失。如何删除邮件是未定义的。 | –log-opt mode=non-blocking |
max-buffer-size | 仅适用于mode设置时non-blocking,这将设置日志缓冲区的最大大小。达到此大小后,日志消息将被删除。 | –log-opt max-buffer-size 5m |
4.none引擎
|
|
5.json-file引擎
|
|
选项 | 解释 | 示例 |
---|---|---|
max-size | 日志在滚动之前的最大大小。一个正整数加上代表测量单位的改性剂(k,m,或g)。 | –log-opt max-size=10m |
max-file | 可以存在的最大日志文件数。如果滚动日志会创建多余的文件,则删除最旧的文件。只有有效时max-size也设置。正整数。 | –log-opt max-file=3 |
labels | 启动Docker守护程序时适用。这个守护进程将接受的与日志相关的标签的逗号分隔列表。用于高级日志标签选项。 | –log-opt labels=production_status,geo |
env | 启动Docker守护程序时适用。这个守护进程将接受的与日志相关的环境变量的逗号分隔列表。用于高级日志标签选项。 | –log-opt env=os,customer |
注意:如果max-size并max-file设置,docker logs则只返回最新日志文件中的日志行。
6.syslog引擎
发送到远程syslog服务器上
或者使用TLS加密
选项 | 解释 | 示例 |
---|---|---|
syslog-address | 外部syslog服务器的地址。该URI指定符可以是[tcp|udp1|tcp+tls]://host:port,unix://path,或unixgram://path。如果传输是tcp,,udp或者tcp+tls,默认端口是514。 –log-opt syslog-address=tcp+tls://192.168.1.3:514, | –log-opt syslog-address=unix:///tmp/syslog.sock |
syslog-facility | 使用的syslog设施。可以是任何有效syslog设施的号码或名称。请参阅syslog文档。 | –log-opt syslog-facility=daemon |
syslog-tls-ca-cert | 由CA签署的信任证书的绝对路径。如果地址协议没有,则忽略tcp+tls。 | –log-opt syslog-tls-ca-cert=/etc/ca-certificates/custom/ca.pem |
syslog-tls-cert | TLS证书文件的绝对路径。如果地址协议没有,则忽略tcp+tls。 | –log-opt syslog-tls-cert=/etc/ca-certificates/custom/cert.pem |
syslog-tls-key | TLS密钥文件的绝对路径。如果地址协议没有,则忽略tcp+tls。 | –log-opt syslog-tls-key=/etc/ca-certificates/custom/key.pem |
syslog-tls-skip-verify | 如果设置为true,则在连接到syslog守护程序时将跳过TLS验证。默认为false。如果地址协议没有,则忽略tcp+tls。 | –log-opt syslog-tls-skip-verify=true |
tag | 附加到消息APP-NAME中的字符串syslog。默认情况下,Docker使用容器ID的前12个字符标记日志消息。请参阅日志标签选项文档以自定义日志标记格式。 | –log-opt tag=mailer |
syslog-format | syslog要使用的消息格式。如果未指定,则使用本地UNIX系统日志格式,而不指定主机名。指定rfc3164RFC-3164兼容格式,rfc5424适用于RFC-5424兼容格式,或rfc5424micro为具有微秒时间戳分辨率的RFC-5424兼容格式指定。 | –log-opt syslog-format=rfc5424micro |
labels | 启动Docker守护程序时适用。这个守护进程将接受的与日志相关的标签的逗号分隔列表。用于高级日志标签选项。 | –log-opt labels=production_status,geo |
env | 启动Docker守护程序时适用。这个守护进程将接受的与日志相关的环境变量的逗号分隔列表。用于高级日志标签选项。 | –log-opt env=os,customer |