將 docker logs 與遠端日誌驅動程式一起使用

概述

無論配置的日誌記錄驅動程式或外掛是什麼,您都可以使用 docker logs 命令來讀取容器日誌。Docker 引擎使用 local 日誌記錄驅動程式作為快取,來讀取容器的最新日誌。這被稱為雙重日誌記錄。預設情況下,快取啟用了日誌檔案輪換,並且每個容器最多限制為 5 個 20 MB 的檔案(壓縮前)。

請參閱配置選項部分來自定義這些預設值,或參閱停用雙重日誌記錄部分來停用此功能。

先決條件

如果配置的日誌記錄驅動程式不支援讀取日誌,Docker 引擎會自動啟用雙重日誌記錄。

以下示例顯示了在有和沒有雙重日誌記錄功能的情況下執行 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
    
注意

對於支援讀取日誌的日誌記錄驅動程式,例如 localjson-filejournald 驅動程式,雙重日誌記錄功能可用前後,其功能沒有區別。對於這些驅動程式,兩種情況下都可以使用 docker logs 讀取日誌。

配置選項

雙重日誌記錄快取接受與 local 日誌記錄驅動程式相同的配置選項,但帶有 cache- 字首。這些選項可以按容器指定,新容器的預設值可以使用守護程序配置檔案來設定。

預設情況下,快取已啟用日誌檔案輪換,每個容器最多限制為 5 個 20MB 的檔案(壓縮前)。使用下面描述的配置選項來自定義這些預設值。

選項預設值描述
cache-disabled"false"停用本地快取。布林值以字串形式傳遞(true10false)。
cache-max-size"20m"快取輪換前的最大大小。一個正整數加上一個代表計量單位的修飾符(kmg)。
cache-max-file"5"可以存在的最大快取檔案數。如果輪換日誌建立了多餘的檔案,則會刪除最舊的檔案。一個正整數。
cache-compress"true"啟用或停用對輪換的日誌檔案進行壓縮。布林值以字串形式傳遞(true10false)。

停用雙重日誌記錄快取

使用 cache-disabled 選項停用雙重日誌記錄快取。在只需要透過遠端日誌系統讀取日誌,並且不需要透過 docker logs 讀取日誌進行除錯的情況下,停用快取有助於節省儲存空間。

使用守護程序配置檔案時,可以為單個容器停用快取,也可以為新容器預設停用快取。

以下示例使用守護程序配置檔案將 splunk 日誌記錄驅動程式作為預設,並停用快取。

$ cat /etc/docker/daemon.json
{
  "log-driver": "splunk",
  "log-opts": {
    "cache-disabled": "true",
    ... (options for "splunk" logging driver)
  }
}
注意

對於支援讀取日誌的日誌記錄驅動程式,如 localjson-filejournald 驅動程式,不使用雙重日誌記錄,停用該選項沒有效果。

限制

  • 如果使用日誌記錄驅動程式或外掛傳送遠端日誌的容器出現網路問題,則不會向本地快取進行任何 `write` 操作。
  • 如果因任何原因(檔案系統已滿、寫入許可權被移除)對 `logdriver` 的寫入失敗,則快取寫入也會失敗,並記錄在守護程序日誌中。不會重試對快取的日誌條目寫入。
  • 在預設配置下,由於使用環形緩衝區以防止在檔案寫入緩慢時阻塞容器的 stdio,某些日誌可能會從快取中丟失。管理員必須在守護程序關閉時修復這些問題。