docker 日志驱动程序

logging driver 说明

Docker中的日志驱动程序(logging driver)用于控制容器的日志记录方式,允许您将容器中生成的日志发送到不同的目标,如标准输出、文件、远程日志服务器等。

logging driver 类型

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 Enterprise 和 Splunk Cloud 中的 HTTP 事件收集器。
etwlogs:	将日志消息写入 Windows 事件跟踪 (ETW) 事件。仅适用于 Windows 平台。
gcplogs:	将日志消息写入 Google Cloud Platform (GCP) 日志记录。

container logs

默认情况下,"docker logs"或"docker service logs"会显示命令的输出,就像在终端中交互式运行命令时一样。Unix 和 Linux 命令通常在运行时会打开三个 I/O 流,称为 STDIN、STDOUT 和 STDERR。 STDIN 是命令的输入流,可能包括来自键盘或其他命令的输入。STDOUT 通常是命令的正常输出,而 STDERR 通常用于输出错误消息。默认情况下,“docker logs”显示命令的 STDOUT 和 STDERR。

JSON File logging driver

json-file 说明

日志格式为 JSON。Docker 的默认日志记录驱动程序。随着时间的推移,这些日志文件的大小会不断扩大,从而导致磁盘资源可能耗尽。为了避免日志数据过度使用磁盘的问题,需要配置日志轮换功能。
json-file 日志驱动程序使用基于文件的存储。这些文件设计为仅由 Docker 守护程序访问。使用外部工具与这些文件交互可能会干扰 Docker 的日志系统并导致意外行为,因此应该避免这样做。

json-file 常用选项

max-size: 日志在滚动之前的最大大小。一个正整数加上表示单位的修饰符(k、m 或 g)。默认值为 -1(无限制)。--log-opt max-size=10m
max-file: 可以存在的最大日志文件数。如果滚动日志会创建过多的文件,则将删除最旧的文件。只在设置了 max-size 时有效。一个正整数。默认为 1。--log-opt max-file=3
labels: 在启动 Docker 守护程序时应用。一个逗号分隔的与日志相关的标签列表,该守护程序接受这些标签。--log-opt labels=production_status,geo
labels-regex: 与标签类似且兼容。一个正则表达式,用于匹配与日志相关的标签。--log-opt labels-regex=^(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

json-file 配置方式

可以通过在Docker守护程序启动时的--log-driver=json-file参数或在容器运行时的--log-driver=json-file参数来指定使用JSON File日志驱动程序。

daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

命令行

# docker run  --log-driver json-file --log-opt max-size=10m alpine echo hello world

json-file 日志输出位置

JSON File日志驱动程序将容器的标准输出和标准错误输出写入JSON格式的文件中,默认情况下保存在容器的/var/lib/docker/containers/<container-id>/<container-id>-json.log文件中。

json-file 示例

docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash

Local file logging driver

Local file 说明

local日志驱动程序捕获容器的stdout/stderr输出,将其写入一个为性能和磁盘使用进行了优化的内部存储。
默认情况下,本地驱动程序为每个容器保留100MB的日志消息,并使用自动压缩来减小磁盘上的大小。默认值100MB是基于每个文件的默认大小为20M以及默认文件数为5(用于日志轮换)的考虑。
本地日志驱动程序使用基于文件的存储。这些文件设计为仅由 Docker 守护程序访问。使用外部工具与这些文件交互可能会干扰 Docker 的日志系统并导致意外行为,因此应该避免这样做。

Local file 常用选项

max-size:日志在滚动之前的最大大小。一个正整数加上表示单位的修饰符(k、m 或 g)。默认为 20m。--log-opt max-size=10m
max-file:可以存在的最大日志文件数目。如果滚动日志创建了过多的文件,将删除最旧的文件。正整数。默认为 5。--log-opt max-file=3
compress:启用已轮换日志文件的压缩。默认情况下为启用状态。--log-opt compress=false

Local file 配置方式

daemon.json

{
  "log-driver": "local",
  "log-opts": {
    "max-size": "10m"
  }
}

命令行

docker run \
      --log-driver local --log-opt max-size=10m \
      alpine echo hello world

Local file 示例

# docker run -it --log-driver local --log-opt max-size=10m --log-opt max-file=3 alpine ash

参考文档

https://docs.docker.com/config/containers/logging/configure/

posted @ 2024-04-26 09:49  小吉猫  阅读(69)  评论(0编辑  收藏  举报