搭配遠端日誌記錄驅動程式使用 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。管理員必須在守護程式關閉時修復這些問題。