將 docker logs 與遠端日誌驅動程式一起使用
概述
您可以使用 docker logs
命令讀取容器日誌,無論配置的日誌驅動程式或外掛是什麼。Docker Engine 使用 local
日誌驅動程式充當快取,用於讀取容器的最新日誌。這稱為雙重日誌記錄。預設情況下,快取啟用日誌檔案輪轉,並且每個容器最多限制為 5 個檔案,每個檔案 20 MB(壓縮前)。
請參閱 配置選項 部分以自定義這些預設值,或參閱 停用雙重日誌記錄 部分以停用此功能。
先決條件
如果配置的日誌驅動程式不支援讀取日誌,Docker Engine 會自動啟用雙重日誌記錄。
以下示例顯示了在有和沒有雙重日誌記錄可用性的情況下執行 docker logs
命令的結果
沒有雙重日誌記錄功能
當容器配置了遠端日誌驅動程式(如 splunk
)並且停用了雙重日誌記錄時,嘗試在本地讀取容器日誌將顯示錯誤
步驟 1:配置 Docker 守護程式
$ cat /etc/docker/daemon.json { "log-driver": "splunk", "log-opts": { "cache-disabled": "true", ... (options for "splunk" logging driver) } }
步驟 2:啟動容器
$ docker run -d busybox --name testlog top
步驟 3:讀取容器日誌
$ docker logs 7d6ac83a89a0 Error response from daemon: configured logging driver does not support reading
具有雙重日誌記錄功能
啟用雙重日誌記錄快取後,即使日誌驅動程式不支援讀取日誌,也可以使用 docker logs
命令讀取日誌。以下示例顯示了使用 splunk
遠端日誌驅動程式作為預設值的守護程式配置,並啟用了雙重日誌記錄快取
步驟 1:配置 Docker 守護程式
$ cat /etc/docker/daemon.json { "log-driver": "splunk", "log-opts": { ... (options for "splunk" logging driver) } }
步驟 2:啟動容器
$ docker run -d busybox --name testlog top
步驟 3:讀取容器日誌
$ docker logs 7d6ac83a89a0 2019-02-04T19:48:15.423Z [INFO] core: marked as sealed 2019-02-04T19:48:15.423Z [INFO] core: pre-seal teardown starting 2019-02-04T19:48:15.423Z [INFO] core: stopping cluster listeners 2019-02-04T19:48:15.423Z [INFO] core: shutting down forwarding rpc listeners 2019-02-04T19:48:15.423Z [INFO] core: forwarding rpc listeners stopped 2019-02-04T19:48:15.599Z [INFO] core: rpc listeners successfully shut down 2019-02-04T19:48:15.599Z [INFO] core: cluster listeners successfully shut down
注意
對於支援讀取日誌的日誌驅動程式(如
local
、json-file
和journald
驅動程式),在雙重日誌記錄功能可用之前和之後,功能沒有區別。對於這些驅動程式,日誌可以在兩種情況下使用docker logs
讀取。
配置選項
雙重日誌記錄快取接受與 local
日誌驅動程式 相同的配置選項,但使用 cache-
字首。這些選項可以針對每個容器指定,並且可以使用 守護程式配置檔案 為新容器設定預設值。
預設情況下,快取啟用日誌檔案輪轉,並且每個容器最多限制為 5 個檔案,每個檔案 20MB(壓縮前)。使用下面描述的配置選項自定義這些預設值。
選項 | 預設值 | 描述 |
---|---|---|
cache-disabled | "false" | 停用本地快取。作為字串傳遞的布林值(true 、1 、0 或 false )。 |
cache-max-size | "20m" | 快取輪轉之前的最大大小。一個正整數加上表示度量單位的修飾符(k 、m 或 g )。 |
cache-max-file | "5" | 可以存在快取檔案的最大數量。如果輪轉日誌會建立過多的檔案,則會刪除最舊的檔案。一個正整數。 |
cache-compress | "true" | 啟用或停用輪轉日誌檔案的壓縮。作為字串傳遞的布林值(true 、1 、0 或 false )。 |
停用雙重日誌記錄快取
使用 cache-disabled
選項停用雙重日誌記錄快取。在僅透過遠端日誌系統讀取日誌且無需透過 docker logs
讀取日誌進行除錯的情況下,停用快取有助於節省儲存空間。
可以使用 守護程式配置檔案 為單個容器或為新容器預設情況下停用快取。
以下示例使用守護程式配置檔案將 splunk
日誌驅動程式用作預設值,並停用快取
$ cat /etc/docker/daemon.json
{
"log-driver": "splunk",
"log-opts": {
"cache-disabled": "true",
... (options for "splunk" logging driver)
}
}
注意
對於支援讀取日誌的日誌驅動程式(如
local
、json-file
和journald
驅動程式),不會使用雙重日誌記錄,停用該選項不會產生任何影響。
限制
- 如果使用遠端傳送日誌的日誌驅動程式或外掛的容器遇到網路問題,則不會寫入本地快取。
- 如果由於任何原因(檔案系統已滿、寫入許可權已刪除)寫入
logdriver
失敗,則快取寫入失敗並在守護程式日誌中記錄。不會重試寫入快取的日誌條目。 - 在預設配置中,某些日誌可能會從快取中丟失,因為使用了環形緩衝區,以防止在檔案寫入速度慢的情況下阻塞容器的標準輸入/輸出。管理員必須在守護程式關閉時修復這些問題。