Setup logrotate in Linux === ###### tags: `logrotate` `Linux` `Docker` `Container` ## 目的 - 用 logrotate 控管docker container的log ## 簡介 - logrotate 是一個 Unix/Linux 系統上的日誌管理工具,它的主要功能是自動輪轉、壓縮、刪除和郵件發送日誌文件,透過定期輪轉日誌文件,防止日誌文件變得過大,從而節省磁碟空間並保持系統的高效運行。 - 基本上linux內建,不過還是可以下下看安裝指令 ``` sudo apt install logrotate ``` - 確認logrotate.conf有內容並且包含 include /etc/logrotate.d ``` cat /etc/logrotate.conf # packages drop log rotation information into this directory include /etc/logrotate.d ``` - 觀察路徑底下其他設定檔案怎麼寫 ``` ls -l /etc/logrotate.d/ ``` ## 建立並編輯 /etc/logrotate.d/docker-containers ``` sudo nano /etc/logrotate.d/docker-containers ``` - 填入logrotate配置 ``` /var/lib/docker/containers/*/*.log { daily rotate 7 compress missingok notifempty copytruncate } ``` - daily:每日輪轉日誌。 - rotate 7:保留 7 天的日誌。 - compress:壓縮舊的日誌文件。(不想壓縮就拿掉) - missingok:如果日誌文件不存在,不會報錯。 - notifempty:跳過空文件。 - copytruncate:截斷原文件並將當前日誌複製到新的文件中。 ## 測試配置並運行logrotate ``` sudo logrotate -f /etc/logrotate.d/docker-containers ``` ## 設定crontab定期運行 ``` 0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf ``` ## debug 模式執行 logrotate ``` sudo logrotate -d /etc/logrotate.conf ``` --- ### 查看 /var/lib/docker/containers壓縮內容 - 使用zcat查看壓縮log內容 ``` zcat /var/lib/docker/containers/<container-id>/<container-id>-json.log.1.gz ``` - 使用 zless 分頁查看壓縮log內容 ``` zless /var/lib/docker/containers/<container-id>/<container-id>-json.log.1.gz ``` - 使用 zgrep 可以搜尋壓縮log特定內容 ``` zgrep "search-term" /var/lib/docker/containers/<container-id>/<container-id>- json.log.1.gz ``` ### logrotate配置包含日志傳遞功能 logrotate 提供了 prerotate 和 postrotate 指令,允许你在日志轮转之前或之后运行自定义脚本。 - prerotate:在日志轮转之前执行。 - postrotate:在日志轮转之后执行。 可以利用此配置於rotate後將log以email寄出,也可以將舊日志清除。 ``` /var/lib/docker/containers/*/*.log { daily rotate 7 compress missingok notifempty copytruncate postrotate /usr/bin/echo "Log rotated for Docker container logs" | /usr/bin/mail -s "Logrotate Notification" user@example.com /usr/bin/find /tmp -name 'myapp-tmp-*' -type f -delete endscript } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up