Fluentd 日志驱动程序

fluentd日志驱动程序将容器日志发送到Fluentd收集器作为结构化日志数据。然后,用户可以使用任何Fluentd的各种输出插件将这些日志写入各种目标。

除了日志消息本身,fluentd日志驱动程序还在结构化日志消息中发送以下元数据

字段描述
container_id完整的64个字符的容器ID。
container_name启动容器时的容器名称。如果您使用docker rename重命名容器,则新名称不会反映在日志条目中。
sourcestdoutstderr
log容器日志

用法

某些选项支持通过根据需要多次指定--log-opt来指定。

  • fluentd-address:指定要连接到Fluentd守护程序的套接字地址,例如fluentdhost:24224unix:///path/to/fluentd.sock
  • tag:为Fluentd消息指定标签。支持一些Go模板标记,例如{{.ID}}{{.FullID}}{{.Name}} docker.{{.ID}}

要使用fluentd驱动程序作为默认日志驱动程序,请在daemon.json文件中将log-driverlog-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-asyncfluentd-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

labelsenv选项分别接受以逗号分隔的键列表。如果labelenv键之间发生冲突,则env的值优先。这两个选项都会向日志消息的额外属性添加附加字段。

env-regexlabels-regex选项分别类似于并兼容envlabels。它们的值是用于匹配与日志相关的环境变量和标签的正则表达式。它用于高级日志标签选项

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节点以创建聚合存储,则此镜像特别有用。

测试容器记录器

  1. 编写一个配置文件(test.conf)来转储输入日志

    <source>
      @type forward
    </source>
    
    <match *>
      @type stdout
    </match>
  2. 使用此配置文件启动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
    
  3. 使用fluentd日志驱动程序启动一个或多个容器

    $ docker run --log-driver=fluentd your/application