Fluentd 日志驱动程序
fluentd
日志驱动程序将容器日志发送到 Fluentd 收集器作为结构化的日志数据。然后,用户可以使用任何 Fluentd 的各种输出插件 将这些日志写入不同的目标。
除了日志消息本身之外,fluentd
日志驱动程序还会在结构化日志消息中发送以下元数据
字段 | 描述 |
---|---|
container_id | 完整的 64 个字符的容器 ID。 |
container_name | 容器启动时的名称。如果您使用 docker rename 重命名容器,则新的名称不会反映在日志条目中。 |
source | stdout 或 stderr |
log | 容器日志 |
用法
某些选项通过多次指定 --log-opt
来支持
fluentd-address
:指定要连接到的 Fluentd 守护程序的套接字地址,例如fluentdhost:24224
或unix:///path/to/fluentd.sock
。tag
:为 Fluentd 消息指定一个标签。支持一些 Go 模板标记,例如{{.ID}}
、{{.FullID}}
或{{.Name}}
docker.{{.ID}}
。
要将 fluentd
驱动程序用作默认日志驱动程序,请在 daemon.json
文件中将 log-driver
和 log-opt
键设置为适当的值,该文件位于 Linux 主机上的 /etc/docker/
或 Windows Server 上的 C:\ProgramData\docker\config\daemon.json
中。有关使用 daemon.json
配置 Docker 的更多信息,请参阅 daemon.json。
以下示例将日志驱动程序设置为 fluentd
并设置 fluentd-address
选项。
{
"log-driver": "fluentd",
"log-opts": {
"fluentd-address": "fluentdhost:24224"
}
}
重新启动 Docker 使更改生效。
注意
daemon.json
配置文件中的log-opts
配置选项必须作为字符串提供。因此,布尔值和数字值(如fluentd-async
或fluentd-max-retries
的值)必须用引号("
)括起来。
要为特定容器设置日志驱动程序,请将 --log-driver
选项传递给 docker run
$ docker run --log-driver=fluentd ...
在使用此日志驱动程序之前,请启动 Fluentd 守护程序。日志驱动程序默认通过 localhost:24224
连接到此守护程序。使用 fluentd-address
选项连接到不同的地址。
$ docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224
如果容器无法连接到 Fluentd 守护程序,则容器会立即停止,除非使用 fluentd-async
选项。
选项
用户可以使用 --log-opt NAME=VALUE
标志指定其他 Fluentd 日志驱动程序选项。
fluentd-address
默认情况下,日志驱动程序连接到 localhost:24224
。提供 fluentd-address
选项以连接到不同的地址。支持 tcp
(默认)和 unix
套接字。
$ docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224
$ docker run --log-driver=fluentd --log-opt fluentd-address=tcp://fluentdhost:24224
$ docker run --log-driver=fluentd --log-opt fluentd-address=unix:///path/to/fluentd.sock
以上两个指定了相同的地址,因为 tcp
是默认的。
tag
默认情况下,Docker 使用容器 ID 的前 12 个字符来标记日志消息。有关自定义日志标签格式的信息,请参阅 日志标签选项文档。
labels、labels-regex、env 和 env-regex
labels
和 env
选项都接受用逗号分隔的键列表。如果 label
和 env
键之间存在冲突,则 env
的值优先。这两个选项都会在日志消息的额外属性中添加额外的字段。
env-regex
和 labels-regex
选项分别类似于并与 env
和 labels
兼容。它们的值是匹配与日志相关的环境变量和标签的正则表达式。它用于高级 日志标签选项。
fluentd-async
Docker 在后台连接到 Fluentd。消息会缓冲,直到建立连接。默认为 false
。
fluentd-async-reconnect-interval
启用 fluentd-async
时,fluentd-async-reconnect-interval
选项定义重新建立到 fluentd-address
的连接的间隔(以毫秒为单位)。如果地址解析为一个或多个 IP 地址(例如 Consul 服务地址),此选项很有用。
fluentd-buffer-limit
设置内存中缓冲的事件数。记录将保存在内存中,直到达到此数量。如果缓冲区已满,则记录日志的调用将失败。默认值为 1048576。 (https://github.com/fluent/fluent-logger-golang/tree/master#bufferlimit)
fluentd-retry-wait
重试之间等待的时间。默认为 1 秒。
fluentd-max-retries
最大重试次数。默认为 4294967295
(2**32 - 1)。
fluentd-sub-second-precision
以纳秒分辨率生成事件日志。默认为 false
。
使用 Docker 管理 Fluentd 守护程序
有关 Fluentd
本身的信息,请参阅 项目网页 和 其文档。
要使用此日志驱动程序,请在主机上启动 fluentd
守护程序。我们建议您使用 Fluentd Docker 镜像。如果您希望聚合每个主机上的多个容器日志,然后将日志传输到另一个 Fluentd 节点以创建聚合存储,则此映像特别有用。
测试容器记录器
编写一个配置文件 (
test.conf
) 来转储输入日志<source> @type forward </source> <match *> @type stdout </match>
使用此配置文件启动 Fluentd 容器
$ docker run -it -p 24224:24224 -v /path/to/conf/test.conf:/fluentd/etc/test.conf -e FLUENTD_CONF=test.conf fluent/fluentd:latest
使用
fluentd
日志驱动程序启动一个或多个容器$ docker run --log-driver=fluentd your/application