Fluentd 日誌驅動程式

fluentd 日誌驅動程式會將容器日誌以結構化日誌數據的形式傳送到 Fluentd 收集器。之後,使用者可以利用 Fluentd 各種輸出外掛程式將這些日誌寫入不同的目的地。

除了日誌訊息本身,fluentd 日誌驅動程式還會在結構化日誌訊息中傳送以下詮釋資料:

欄位描述
container_id完整的 64 字元容器 ID。
container_name容器啟動時的名稱。如果您使用 docker rename 重新命名容器,新名稱不會反映在日誌項目中。
來源stdoutstderr
log容器日誌

使用方式

某些選項可以透過多次指定 --log-opt 來支援

  • fluentd-address:指定連線至 Fluentd 守護行程的 Socket 位址,例如 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 的值)必須用引號 (") 括起來。

若要為特定容器設定日誌驅動程式,請在執行 docker run 時傳遞 --log-driver 選項:

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

在使用此日誌驅動程式之前,請先啟動 Fluentd 守護行程。預設情況下,日誌驅動程式會透過 localhost:24224 連線至此守護行程。若要連線至不同位址,請使用 fluentd-address 選項。

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

除非使用了 fluentd-async 選項,否則如果容器無法連線至 Fluentd 守護行程,容器會立即停止。

選項

使用者可以使用 --log-opt NAME=VALUE 旗標來指定額外的 Fluentd 日誌驅動程式選項。

fluentd-address

預設情況下,日誌驅動程式會連線至 localhost:24224。若要連線至不同位址,請提供 fluentd-address 選項。支援 tcp(預設)與 unix socket。

$ 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
    
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.