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 驅動程式用作預設日誌記錄驅動程式,請在位於 Linux 主機上 /etc/docker/ 或 Windows Server 上 C:\ProgramData\docker\config\daemon.jsondaemon.json 檔案中,將 log-driverlog-opt 鍵設定為適當的值。有關使用 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

fluentd-write-timeout

設定向 fluentd 守護程序寫入呼叫的超時時間。預設情況下,寫入沒有超時,並且會無限期阻塞。

使用 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