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