設定 Docker 日誌大小和自動刪除舊日誌:透過配置 Docker 使用 json-file 日誌驅動,同時使用 logrotate 工具,可以設定日誌的最大大小(例如100MB),並在達到該大小時自動刪除舊日誌。這可幫助管理 Docker 日誌檔案大小和保持儲存空間整潔。
步驟 1:配置 Docker 日誌驅動
在 Docker 的配置檔案中,通常是 /etc/docker/daemon.json,可以指定使用 json-file 日誌驅動並設定日誌的最大大小。編輯配置檔案並新增以下內容:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "10"
}
}
- max-size:指定日誌檔案的最大大小,這裡設定為 100MB。
- max-file:指定保留的舊日誌檔案數,這裡設定為 10。
儲存配置檔案並重新啟動 Docker 服務以應用更改:
sudo systemctl daemon-reload && systemctl restart docker
步驟 2:安裝和配置 logrotate
現在,需要安裝和配置 logrotate 工具,以定期輪轉 Docker 日誌檔案。在大多數 Linux 發行版中,logrotate 工具已經安裝。可以使用以下命令來編輯 logrotate 配置檔案:
sudo nano /etc/logrotate.conf
在配置檔案中,可以新增一個新的日誌輪轉配置,以定期清理 Docker 日誌檔案:
/var/lib/docker/containers/*/*.log {
missingok
weekly
rotate 10
size 100M
compress
delaycompress
notifempty
copytruncate
}
/var/lib/docker/containers/*/*.log
:這是 Docker 日誌檔案的預設儲存位置。確保路徑與的系統中的實際路徑匹配。weekly
:日誌輪轉週期,這裡設定為每週。rotate 10
:保留的舊日誌檔案數,與 Docker 日誌驅動配置的 max-file 一致。size 100M
:日誌檔案大小達到 100MB 時觸發輪轉。compress
:啟用壓縮舊日誌。delaycompress
:在壓縮之前保留一個未壓縮的副本。notifempty
:僅在日誌檔案非空時輪轉。copytruncate
:使用 copytruncate 選項避免中斷正在寫入的日誌檔案。
儲存配置檔案並測試 logrotate:
sudo logrotate -d /etc/logrotate.conf
這將模擬日誌輪轉並顯示輪轉操作的詳細資訊。如果一切正常,可以將其設定為定期自動執行:
sudo logrotate -f /etc/logrotate.conf
現在,Docker 日誌將根據配置定期輪轉,並在達到指定的最大大小時刪除舊日誌。
步驟 3:編輯 Cron 作業
開啟 cron 配置檔案以編輯 Cron 作業。通常,Cron 作業的配置檔案位於 /etc/crontab 或 /etc/cron.d 目錄中。
新增一個新的 Cron 作業,以定期執行 logrotate 。以下是一個示例 Cron 作業:
0 0 * * * root /usr/sbin/logrotate -f /etc/logrotate.conf
這個 Cron 作業的含義是在每天午夜(00:00)執行 logrotate。可以根據需要調整時間表。/usr/sbin/logrotate -f /etc/logrotate.conf 是執行 logrotate 的命令。
儲存配置檔案。
步驟 4:重啟 Cron 服務
如果使用的是 systemd,可以使用以下命令重啟 Cron 服務:
sudo systemctl restart cron
如果使用的是 SysV init 系統,可以使用以下命令:
sudo service cron restart
步驟 5:驗證 Cron 作業
可以使用以下命令列出當前配置的 Cron 作業:
crontab -l
這將顯示所有使用者的 Cron 作業,包括新新增的 logrotate 作業。
現在,logrotate 將根據在 Cron 作業中設定的時間表定期執行,執行日誌輪轉操作,以確保日誌檔案的定期清理和管理。