為 Docker 容器設置日誌輪替
我們都需要日誌!
有時候使用 Docker 給我的感覺像是在使用黑盒,特別是在使用 Docker 社區中的映像時,有時會不像預期的那樣順利。在很多情況下,我們都需要使用很多時間去閱讀日誌來除錯。
這篇文章是關於如何為 Docker 容器設定日誌輪替。
默認的日誌驅動程式
我們可以為容器配置不同的日誌記錄驅動程式,默認情況下容器的 stdout 和 stderr 會被寫入到 /var/lib/docker/containers/[container-id]/[container-id]-json.log 的 json 文件。如果一直無人理會,這個文件最終會佔用大量的磁盤空間,如下圖所示:
手動清除日誌
若果這個 json 日誌文件佔用了大量的磁盤空間,我們可以使用下面的命令清除它。
truncate -s 0 <logfile>
或者我們可以考慮設置一個 cronjob 來定期清除這些 json 日誌文件,但從長遠來看,最好還是設置日誌輪替。
設置日誌輪替
配置默認的日誌驅動程式
默認的日誌驅動程式可以通過在 /etc/docker/daemon.json 中定義。如果該文件不存在,可以建立該文件。
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "10" } }
以 json-file 作日誌記錄驅動程式還有幾個其它選項,我們甚至可以更改為其他日誌記錄驅動程式,如 syslog 。有關更多信息,請參閱 Docker Docs - Configure logging drivers。
執行以下命令來重新加載更新後的 daemon.js 。新的配置將在重新啟動後適用於所有新建立的容器。
$ systemctl daemon-reload $ systemctl restart docker
為個別容器配置日誌驅動程式
如果您不想作全局配置,也可以在個別容器級作日誌驅動程式改動。
使用 docker run 命令
我們可以在 docker run 命令中指定日誌記錄驅動程式與其選項。例如:
$ docker run \ --log-driver json-file \ --log-opt max-size=10m \ --log-opt max-file=10 \ alpine echo hello world
使用 docker-compose
日誌記錄驅動程式與其選項也可以使用 docker-compose 進行配置。例如:
version: '3.2' services: nginx: image: 'nginx:latest' ports: - '80:80' logging: driver: "json-file" options: max-size: "1k" max-file: "3"
來看看配置是否成功。
總結
儘管默認的日誌驅動程式設定不會影響 Docker 正常運作,也不會產生很大問題,但總有一天容器的日誌會佔用所有磁盤空間,通過上述幾個步驟將可以避免發生磁盤空間不足。除此之外,日誌是重要的資產,不僅在出現問題時有用,而且內裡還包含很多隱藏的信息,所以不要看輕日誌的重要性。
如果您正在尋找日誌管理的軟體即服務方案,不妨考慮使用 Boatswain 來幫助您管理所有日誌以及監控 Docker 伺服器的狀態。💫
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!
- 来自作者
- 相关推荐