跳到主內容

logrotate 記錄檔設定

  記錄一下怎麼使用 logrotate 設定

運行環境


  環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式

  • 系統環境: Debian

設定過程


簡單說明

  • logrotate 主要的設定檔位於 /etc/logrotate.conf,其內容會類似這樣:
# 每週進行一次記錄檔輪替
weekly

# 記錄檔擁有者與群組為 root 與 syslog
su root syslog

# 保留 4 次輪替的記錄檔
rotate 4

# 輪替之後,自動建立新的記錄檔
create

# 壓縮輪替後的記錄檔
compress

# 套用一般套件的記錄檔設定
include /etc/logrotate.d

# ...
  • 基本設定
指令 說明
su root syslog 記錄檔擁有者與群組為 root 與 syslog。
missingok 忽略記錄檔不存在問題。
notifempty 不輪替空檔案。
ifempty 輪替空檔案。
rotate 7 保留 7 次輪替的記錄檔。
  • 記錄檔輪替頻率
指令 說明
daily 每日輪替。
weekly 每週輪替。
monthly 每月輪替。
yearly 每年輪替。
size 100k 檔案超過 100k 時輪替。
size 2M 檔案超過 2M 時輪替。
size 1G 檔案超過 1G 時輪替。
  • 進階用方
指令 說明
minage 3 不輪替 3 天以內建立的記錄檔。
maxage 30 保留 30 天以前的記錄檔。
maxsize 100k 搭配 daily 等間隔條件使用,檔案超過 100k 或達到間隔條件時輪替。
minsize 100k 搭配 daily 等間隔條件使用,檔案超過 100k 同時達到間隔條件時輪替。
  • 記錄檔壓縮
指令 說明
compress 壓縮輪替後的舊記錄檔。
nocompress 不壓縮輪替後的舊記錄檔。
delaycompress 延遲壓縮記錄檔。
nodelaycompress 不延遲壓縮記錄檔。
  • Email 寄送記錄檔
指令 說明
mail [email protected] 將過期的記錄檔寄送至 [email protected]
nomail 不以 Email 寄送記錄檔。
mailfirst 寄送最新輪替的記錄檔。
maillast 寄送過期(將刪除)的記錄檔。
  • 舊記錄檔目錄
指令 說明
olddir /var/log/old 將舊記錄檔放在 /var/log/old 目錄。
noolddir 將舊記錄檔放在相同目錄。
createolddir 0755 root admin 指定 0755 權限、root 使用者、admin 群組,建立舊記錄檔目錄。
nocreateolddir 不要自動建立舊記錄檔目錄。
  • 以日期命名舊記錄檔
指令 說明
dateext 使用日期的方式來為舊的記錄檔命名。
dateyesterday 以昨天的日期為檔案命名基準。
dateformat -%Y%m%d 設定日期格式,格式請參考 strftime 的文件。
nodateext 不使用日期來為舊的記錄檔命名。
  • 清除敏感資料
指令 說明
shred 使用 shred 銷毀要刪除的記錄檔。
shredcycles 3 設定 shred 抹除次數為 3。
noshred 不使用 shred 銷毀記錄檔。
  • 測試 logrotate 設定檔是否有成功
sudo logrotate -d /etc/logrotate.conf
  • 範例說明
#分割設定:
#在/etc/logrotate.d/目錄下生成該tool檔案


/mnt/nginx/logs/*.log {     #注意:請以自己的tool為準
    daily                   #每天切割
    size=100M               #每100M做一次rotation,如果 weekly 與 size 這兩個設定都有加,表示如果檔案不到100M便不會生成rotation
    dateext                 #%Y%m%d作為字尾
    missingok               #日誌不存在,分析下一個
    rotate 20               #保留最近的20個備份
    compress                #切換之後壓縮.tar.gz
    notifempty              #空檔案不轉儲
    create 640 root root    #新日誌檔案模式 root 是使用的使用者
    sharedscripts           #整個日誌組執行一次的指令碼
    postrotate
    endscript
}

補充說明


備註





參考相關網頁