配置日志记录驱动程序
Docker 包含多种日志记录机制,可帮助您从 运行容器和服务。这些机制称为日志记录驱动程序。 每个 Docker 守护程序都有一个默认的日志记录驱动程序,每个容器都使用它 除非将其配置为使用不同的日志记录驱动程序,或者将 短。
默认情况下,Docker 使用json-file
日志记录驱动程序哪
在内部将容器日志缓存为 JSON。除了使用日志记录驱动程序
包含在 Docker 中,您还可以实现和使用日志记录驱动程序插件。
提示
使用
local
logging 驱动程序以防止磁盘耗尽。默认情况下,不执行日志轮换。因此,由 违约json-file
日志记录驱动程序logging 驱动程序可能会导致 大量磁盘空间用于生成大量 output,这可能会导致磁盘空间耗尽。Docker 将 json 文件日志记录驱动程序(没有日志轮换)作为默认值 保持与旧版本 Docker 的向后兼容性,以及在某些情况下 其中 Docker 用作 Kubernetes 的运行时。
对于其他情况,
local
建议使用 logging 驱动程序,因为它会执行 log-rotation 的 S Rotate,并使用更高效的文件格式。请参阅下面的 配置默认日志记录驱动程序 部分,了解如何配置local
logging 驱动程序作为默认值, 和 Local File Logging Driver 页面,了解有关local
logging 驱动程序。
配置默认日志记录驱动程序
要将 Docker 守护程序配置为默认使用特定的日志记录驱动程序,请将
的值log-driver
添加到daemon.json
配置文件。请参阅dockerd
参考手册了解详情。
默认日志记录驱动程序为json-file
.以下示例将默认值
logging 驱动程序添加到local
日志驱动程序:
{
"log-driver": "local"
}
如果日志记录驱动程序具有可配置的选项,您可以在daemon.json
file 作为 JSON 对象,键为log-opts
.以下内容
example 在json-file
日志记录驱动程序:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"labels": "production_status",
"env": "os,customer"
}
}
重新启动 Docker,以使更改对新创建的容器生效。 现有容器不会自动使用新的日志记录配置。
注意
log-opts
配置选项中的daemon.json
配置文件必须 以字符串形式提供。布尔值和数值(例如max-file
)必须用引号 () 括起来。"
如果未指定日志记录驱动程序,则默认值为json-file
.
要查找 Docker 守护程序的当前默认日志记录驱动程序,请运行docker info
并搜索Logging Driver
.您可以使用以下内容
命令(在 Linux、macOS 上)或 PowerShell (在 Windows 上):
$ docker info --format '{{.LoggingDriver}}'
json-file
注意
更改守护进程中的默认日志记录驱动程序或日志记录驱动程序选项 配置仅影响在配置后创建的容器 已更改。现有容器保留 在创建它们时使用。要更新容器的日志记录驱动程序, 必须使用所需的选项重新创建 container。 请参阅下面的为容器配置日志记录驱动程序部分,了解如何查找 容器。
为容器配置日志记录驱动程序
启动容器时,您可以将其配置为使用不同的日志记录
driver 而不是 Docker 守护程序的默认值,使用--log-driver
旗。如果
logging 驱动程序具有可配置的选项,您可以使用一个或多个
的实例--log-opt <NAME>=<VALUE>
旗。即使容器使用
default logging 驱动程序,它可以使用不同的可配置选项。
以下示例使用none
logging 驱动程序。
$ docker run -it --log-driver none alpine ash
要查找正在运行的容器的当前日志记录驱动程序,如果守护进程
正在使用json-file
logging 驱动程序中,运行以下docker inspect
命令,将容器名称或 ID 替换为<CONTAINER>
:
$ docker inspect -f '{{.HostConfig.LogConfig.Type}}' <CONTAINER>
json-file
配置日志消息从容器到日志驱动的投递模式
Docker 提供了两种模式,用于将消息从容器投递到日志 司机:
- (默认)直接,阻止从容器到驱动程序的交付
- 非阻塞传递,将日志消息存储在每个容器的中间缓冲区中,供驱动程序使用
这non-blocking
消息传递模式可防止应用程序因
对 log 背压。在以下情况下,应用程序可能会以意外方式失败
STDERR 或 STDOUT 流阻止。
警告
当缓冲区已满时,新邮件将不会排入队列。丢弃消息通常比阻止 应用程序的日志写入过程。
这mode
log 选项控制是否使用blocking
(默认)或non-blocking
消息传递。
这max-buffer-size
控制用于
中间消息存储mode
设置为non-blocking
.
默认值为1m
这意味着 1 MB(100 万字节)。
看功能FromHumanSize()
在go-units
包对于允许的格式字符串,
一些例子是1KiB
对于 1024 字节,2g
20 亿字节。
以下示例启动一个 Alpine 容器,其日志输出为非阻塞 mode 和 4 MB 缓冲区:
$ docker run -it --log-opt mode=non-blocking --log-opt max-buffer-size=4m alpine ping 127.0.0.1
将环境变量或标签与日志记录驱动程序一起使用
一些日志记录驱动程序会添加容器的--env|-e
或--label
标志添加到容器的日志中。此示例使用 Docker 启动
守护程序的默认日志记录驱动程序(在以下示例中,json-file
) 但
设置环境变量os=ubuntu
.
$ docker run -dit --label production_status=testing -e os=ubuntu alpine sh
如果日志记录驱动程序支持,则会向日志记录添加其他字段
输出。以下输出由json-file
日志记录驱动程序:
"attrs":{"production_status":"testing","os":"ubuntu"}
支持的日志记录驱动程序
支持以下日志记录驱动程序。查看每个驱动程序的链接 其可配置选项的文档(如果适用)。如果您正在使用日志记录驱动程序插件,您可以 查看更多选项。
司机 | 描述 |
---|---|
none | 容器没有可用的日志,并且docker logs 不返回任何输出。 |
local | 日志以自定义格式存储,旨在将开销降至最低。 |
json-file | 日志的格式为 JSON。Docker 的默认日志记录驱动程序。 |
syslog | 将日志记录消息写入syslog 设备。这syslog 守护程序必须在主机上运行。 |
journald | 将日志消息写入journald .这journald 守护程序必须在主机上运行。 |
gelf | 将日志消息写入 Graylog 扩展日志格式 (GELF) 终端节点,例如 Graylog 或 Logstash。 |
fluentd | 将日志消息写入fluentd (向前输入)。这fluentd 守护程序必须在主机上运行。 |
awslogs | 将日志消息写入 Amazon CloudWatch Logs。 |
splunk | 将日志消息写入splunk 使用 HTTP 事件收集器。 |
etwlogs | 将日志消息写入 Windows 事件跟踪 (ETW) 事件。仅在 Windows 平台上可用。 |
gcplogs | 将日志消息写入 Google Cloud Platform (GCP) Logging。 |
日志记录驱动程序的限制
- 读取日志信息需要解压缩轮换的日志文件,这会导致 磁盘使用率临时增加(直到来自轮换的 文件读取)和解压缩时 CPU 使用率增加。
- Docker 数据目录所在的主机存储的容量 确定日志文件信息的最大大小。