Docker 紀錄檔自動輪轉和清理設定

2023-10-11 15:00:21

設定 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 作業中設定的時間表定期執行,執行紀錄檔輪轉操作,以確保紀錄檔檔案的定期清理和管理。