更多文章:WorkMap技术博客
Docker内置日志驱动
local
local日志驱动程序,捕获容器的标准输出/标准错误输出,并将它们写入为性能和磁盘使用进行了优化的内部存储。
默认情况下,本地驱动程序保留每个容器的100MB日志消息(5个轮换日志文件,每个20M),并使用自动压缩来减小磁盘上的大小。
注意:本地记录驱动程序使用基于文件的存储。文件格式和存储机制设计为仅由Docker守护程序访问,不应由外部工具使用,因为实现方式可能在未来版本中发生更改。
使用方法
- 修改daemon.json
Linux:/etc/docker/
Windows Server:C:\ProgramData\docker\config\daemon.json{ "log-driver" : "local" , "log-opts" : { "max-size" : "10m" } }
- 重新启动Docker以使新创建的容器生效。(现有容器不使用新的日志记录配置)。
docker run \ --log-driver local --log-opt max-size = 10m \ alpine echo hello world
参数
-
max-size
滚动日志之前的最大大小。正整数加上表示度量单位(k、m或g)的修饰符。默认为20m。
–log-opt max-size=10m -
max-file
可以存在的日志文件的最大数量。如果滚动日志创建了多余的文件,则删除最旧的文件。正整数。默认为5。
–log-opt max-file=3 -
compress
切换旋转日志文件的压缩。默认启用。
–log-opt compress=false
示例
启动了一个alpine容器,该容器最多可以有3个大小不超过10兆字节的日志文件。
docker run -it --log-driver local --log-opt max-size=10m --log-opt max-file=3 alpine ash
logentries
logentries日志驱动程序将容器日志发送到Logentries服务器。
使用方法
- 修改默认日志记录驱动程序
dockerd --log-driver = logentries
- 要为特定容器指定日志记录驱动程序(在Logentries Web界面中创建一个新的日志集,并获取token)
docker run --log-driver = logentries --log-opt logentries-token = abcd1234-12ab-34cd-5678-0123456789ab
在使用此日志记录驱动程序之前,您需要在Logentries Web界面中创建一个新的日志集,并将该日志集的令牌传递给Docker:
参数
使用–log-opt NAME = VALUE,指定Logentries日志记录驱动程序的参数。
-
logentries-token
logentries驱动程序的日志集令牌
-
line-only
是否将日志消息包装到容器数据中(默认)或发送原始日志行
json-file
默认情况下,Docker 捕获所有容器的标准输出(和标准错误),并使用 JSON 格式将它们写入文件中。JSON 格式为每一行注释了它的来源(stdout 或 stderr)和时间戳。每个日志文件仅包含一个容器的信息。
{ “log” : "Log line is here \n " , “stream” : “stdout” , “time” : “2019-01-01T11:11:11.111111111Z” }
警告:json-file 日志驱动程序使用基于文件的存储。这些文件被设计为仅由 Docker 守护进程访问。使用外部工具与这些文件交互可能会干扰 Docker 的日志记录系统并导致意外行为,因此应该避免。
使用方法
- 修改daemon.json
Linux:/etc/docker/
Windows Server:C:\ProgramData\docker\config\daemon.json{ "log-driver" : "json-file" , "log-opts" : { "max-size" : "10m", "max-file" : "3" } }
- 重新启动 Docker 以使新创建的容器生效更改。现有容器不使用新的日志配置。
docker run \ --log-driver json-file --log-opt max-size = 10m \ alpine echo hello world
参数
-
max-size
日志滚动之前的最大大小。正整数加上表示度量单位(k、m或g)的修饰符。默认为-1(无限制)。
-
max-file
可以存在的最大日志文件数。如果滚动日志创建了过多的文件,则会删除最旧的文件。仅当也设置了 max-size 时才有效。默认值为 1。
-
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,与 env 兼容。用于匹配与日志记录相关的环境变量的正则表达式。用于高级日志标签选项。
–log-opt env-regex=^(os|customer)
-
compress
切换旋转日志的压缩。默认情况下禁用。
–log-opt compress=true
示例
启动一个 alpine 容器,最多可以有 3 个大小不超过 10 兆字节的日志文件。
docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash
gelf
gelf日志驱动程序是一种方便的格式,兼容许多工具,例如Graylog、Logstash和Fluentd。在GELF中,每个日志消息都是一个字典,具有以下字段:版本、主机(最初发送消息的人)、时间戳、消息的短版本和长版本以及您自己配置的任何自定义字段。
使用方法:
- 修改daemon.json
Linux:/etc/docker/
Windows Server:C:\ProgramData\docker\config\daemon.json{ “log-driver”:“gelf”, “log-opts”:{ “gelf-address”:“udp://1.2.3.4:12201” } }
- 重新启动 Docker 以使新创建的容器生效更改。现有容器不使用新的日志配置。
docker run \ --log-driver gelf --log-opt gelf-address = udp://1.2.3.4:12201 \ alpine echo hello world
参数
-
gelf-address
必需
GELF服务器的地址。 支持tcp和udp,必须指定端口。
–log-opt gelf-address=udp://192.168.0.42:12201
-
gelf-compression-type
可选 UDP Only
压缩类型。参数值可以是gzip、zlib和none。默认值为gzip。注意,启用压缩会导致过多的CPU使用率,因此强烈建议将其设置为none。
–log-opt gelf-compression-type=gzip
-
gelf-compression-level
可选 UDP Only
当gelf-compression-type为gzip或zlib时的压缩级别。范围为-1到9(BestCompression)的整数。默认值为1(BestSpeed)。较高的级别提供更低速度的更多压缩。-1或0都会禁用压缩。
–log-opt gelf-compression-level=2
-
gelf-tcp-max-reconnect
可选 TCP Only
连接断开时重新连接尝试的最大次数。正整数。默认值为3。
–log-opt gelf-tcp-max-reconnect=3
-
gelf-tcp-reconnect-delay
可选 TCP Only
重新连接尝试之间等待的秒数。正整数。默认值为1。
–log-opt gelf-tcp-reconnect-delay=1
-
tag
可选
附加到gelf消息中APP-NAME的字符串。默认容器ID的前12个字符来标记日志消息。
–log-opt tag=mailer
-
labels
可选
启动Docker守护程序时配置。用于配置日志格式。参考 自定义日志tag
–log-opt labels=production_status,geo
-
labels-regex
可选
–log-opt labels-regex=^(production_status|geo)
-
env
可选
启动Docker守护程序时应用。
–log-opt env=os,customer
-
env-regex
可选
用于匹配与日志记录相关的环境变量的正则表达式。
–log-opt env-regex=^(os|customer)
示例
配置容器以使用运行在192.168.0.42端口12201上的GELF服务器。
docker run -dit \
--log-driver=gelf \
--log-opt gelf-address=udp://192.168.0.42:12201 \
alpine sh