Fluentd 日志记录驱动程序

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

除了日志消息本身之外,日志 Driver 在结构化日志消息中发送以下元数据:fluentd

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

用法

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

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

要将驱动程序用作默认日志记录驱动程序,请在文件中将 和 键设置为适当的值,即 位于 Linux 主机或 Windows Server 上。有关 使用 配置 Docker,请参阅 daemon.jsonfluentdlog-driverlog-optdaemon.json/etc/docker/C:\ProgramData\docker\config\daemon.jsondaemon.json

以下示例将日志驱动程序设置为 并设置选项。fluentdfluentd-address

{
  "log-driver": "fluentd",
  "log-opts": {
    "fluentd-address": "fluentdhost:24224"
  }
}

重新启动 Docker 以使更改生效。

注意

log-opts配置文件中的配置选项必须 以字符串形式提供。因此,必须将布尔值和数值(如 或 的值)括起来 在引号 () 中。daemon.jsonfluentd-asyncfluentd-max-retries"

要为特定容器设置日志记录驱动程序,请将选项传递给:--log-driverdocker run

$ docker run --log-driver=fluentd ...

在使用此日志记录驱动程序之前,请启动 Fluentd 守护程序。日志记录驱动程序 默认情况下,通过 连接到此守护进程。使用该选项连接到其他地址。localhost:24224fluentd-address

$ docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224

如果容器无法连接到 Fluentd 守护程序,则容器将停止 除非使用该选项。fluentd-async

选项

用户可以使用该标志指定其他 Fluentd 日志记录驱动程序选项。--log-opt NAME=VALUE

Fluentd 地址

默认情况下,日志记录驱动程序连接到 .提供连接到其他地址的选项。(默认)和套接字。localhost:24224fluentd-addresstcpunix

$ 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

上面两个指定相同的地址,因为是 default。tcp

标记

默认情况下,Docker 使用容器 ID 的前 12 个字符来标记日志消息。 请参阅 log tag option 文档进行自定义 日志标记格式。

labels、labels-regex、env 和 env-regex

和 选项都采用以逗号分隔的键列表。如果 和 keys 之间存在冲突,take 的值 优先。这两个选项都会向 logging 消息。labelsenvlabelenvenv

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

Fluentd-异步

Docker 在后台连接到 Fluentd。消息将被缓冲,直到 已建立连接。默认为 。false

fluentd-async-reconnect-interval

启用后,选项 定义重新建立 to 连接的间隔(以毫秒为单位)。如果地址 解析为一个或多个 IP 地址,例如 Consul 服务地址。fluentd-asyncfluentd-async-reconnect-intervalfluentd-address

fluentd-buffer-limit 缓冲区限制

设置在内存中缓冲的事件数。记录将存储在内存中 直到这个数字。如果缓冲区已满,则 record 日志的调用将失败。 默认值为 1048576。 ( https://github.com/fluent/fluent-logger-golang/tree/master#bufferlimit)

fluentd-retry-wait

重试之间等待的时间。默认为 1 秒。

fluentd-max-retries

最大重试次数。默认为 (2**32 - 1)。4294967295

流利的亚秒级精度

以纳秒级精度生成事件日志。默认为 。false

使用 Docker 管理 Fluentd 守护程序

关于自身,请参阅项目网页及其文档Fluentd

要使用此日志记录驱动程序,请在主机上启动守护程序。我们建议 您使用 Fluentd 泊坞窗 镜像。这张图片是 如果您想在每个容器上聚合多个容器日志,则特别有用 host 然后,稍后将日志传输到另一个 Fluentd 节点,以创建一个 聚合存储。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