我們都需要日誌!
有時候使用 Docker 給我的感覺像是在使用黑盒,特別是在使用 Docker 社區中的映像時,有時會不像預期的那樣順利。在很多情況下,我們都需要使用很多時間去閱讀日誌來除錯。
這篇文章是關於如何為 Docker 容器設定日誌輪替。
默認的日誌驅動程式
我們可以為容器配置不同的日誌記錄驅動程式,默認情況下容器的 stdout 和 stderr 會被寫入到 /var/lib/docker/containers/[container-id]/[container-id]-json.log 的 json 文件。如果一直無人理會,這個文件最終會佔用大量的磁盤空間,如下圖所示:
手動清除日誌
若果這個 json 日誌文件佔用了大量的磁盤空間,我們可以使用下面的命令清除它。
|
|
或者我們可以考慮設置一個 cronjob 來定期清除這些 json 日誌文件,但從長遠來看,最好還是設置日誌輪替。
設置日誌輪替
配置默認的日誌驅動程式
默認的日誌驅動程式可以通過在 /etc/docker/daemon.json 中定義。如果該文件不存在,可以建立該文件。
|
|
以 json-file 作日誌記錄驅動程式還有幾個其它選項,我們甚至可以更改為其他日誌記錄驅動程式,如 syslog 。有關更多信息,請參閱 Docker Docs - Configure logging drivers。
執行以下命令來重新加載更新後的 daemon.js 。新的配置將在重新啟動後適用於所有新建立的容器。
|
|
為個別容器配置日誌驅動程式
如果您不想作全局配置,也可以在個別容器級作日誌驅動程式改動。
使用 docker run 命令
我們可以在 docker run 命令中指定日誌記錄驅動程式與其選項。例如:
|
|
使用 docker-compose
日誌記錄驅動程式與其選項也可以使用 docker-compose 進行配置。例如:
|
|
來看看配置是否成功。
總結
儘管默認的日誌驅動程式設定不會影響 Docker 正常運作,也不會產生很大問題,但總有一天容器的日誌會佔用所有磁盤空間,通過上述幾個步驟將可以避免發生磁盤空間不足。除此之外,日誌是重要的資產,不僅在出現問題時有用,而且內裡還包含很多隱藏的信息,所以不要看輕日誌的重要性。
如果您正在尋找日誌管理的軟體即服務方案,不妨考慮使用 Boatswain 來幫助您管理所有日誌以及監控 Docker 伺服器的狀態。💫