將 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
    

注意

對於支援讀取日誌的日誌驅動程式(如 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 驅動程式),不會使用雙重日誌記錄,停用該選項不會產生任何影響。

限制

  • 如果使用遠端傳送日誌的日誌驅動程式或外掛的容器遇到網路問題,則不會寫入本地快取。
  • 如果由於任何原因(檔案系統已滿、寫入許可權已刪除)寫入 logdriver 失敗,則快取寫入失敗並在守護程式日誌中記錄。不會重試寫入快取的日誌條目。
  • 在預設配置中,某些日誌可能會從快取中丟失,因為使用了環形緩衝區,以防止在檔案寫入速度慢的情況下阻塞容器的標準輸入/輸出。管理員必須在守護程式關閉時修復這些問題。