• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Linux 記錄檔輪替管理 logrotate 教學與範例

介紹如何在 Linux 系統中使用 logrotate 管理系統各類記錄檔的輪替、壓縮與保存。

logrotate 記錄檔管理工具

在 Linux 系統上大部分的系統記錄檔都會放在 /var/log 目錄以及子目錄中,但系統各種記錄檔的內容會持續累積,若沒有定期管理與清理,就會不斷增長,造成記錄檔過於龐大的問題。

logrotate 是一個專門用來管理系統記錄檔的工具,它負責定期整理系統記錄檔,將舊的記錄檔壓縮保存,或是刪除過期的記錄檔,避免記錄檔灌爆磁碟空間。

安裝 logrotate

正常來說,一般的 Linux 發行版都會安裝好 logrotate,如果遇到特殊狀況需要自行安裝,可以使用 yum 或 apt 安裝:

# 安裝 logrotate(Ubuntu/Debian)
sudo apt install logrotate

# 安裝 logrotate(RHEL/CentOS)
sudo yum install logrotate

logrotate 設定檔

logrotate 主要的設定檔位於 /etc/logrotate.conf,其內容會類似這樣:

# 每週進行一次記錄檔輪替
weekly

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

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

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

# 壓縮輪替後的記錄檔
compress

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

# ...

在 /etc/logrotate.conf 中會包含一些預設的設定值,例如記錄檔的輪替頻率、保留數量等,而對於個別套件或服務(例如 nginx 等)的記錄檔輪替設定,則會放在 /etc/logrotate.d 目錄中,透過這裡的 include 來套用個別套件的記錄檔設定。

以 nginx 伺服器的記錄檔輪替設定 /etc/logrotate.d/nginx 來說,其設定內容會類似這樣:

# nginx 記錄檔輪替設定
/var/log/nginx/*.log { # 記錄檔位置
    daily                # 每日輪替一次
    missingok            # 忽略記錄檔不存在問題
    rotate 14            # 保留 14 次輪替的記錄檔
    compress             # 壓縮輪替後的記錄檔
    delaycompress        # 延遲壓縮記錄檔
    notifempty           # 不輪替空的記錄檔
    create 0640 www-data adm # 記錄檔擁有者/群組為 www-data/adm,權限為 0640
    sharedscripts        # 所有記錄檔輪替,只執行一次 prerotate 與 postrotate 指令稿
    prerotate            # 輪替前指令稿
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi \
    endscript
    postrotate           # 輪替後指令稿
        invoke-rc.d nginx rotate >/dev/null 2>&1
    endscript
}

在個別服務的設定中,可以針對不同的服務來給予不同的設定,若沒有指定的話,就會套用 /etc/logrotate.conf 中預設的設定。

基本設定

以下是一些 logrotate 中常用的基本設定指令:

指令 說明
su root syslog 記錄檔擁有者與群組為 root 與 syslog。
missingok 忽略記錄檔不存在問題。
notifempty 不輪替空檔案。
ifempty 輪替空檔案。
rotate 7 保留 7 次輪替的記錄檔。

記錄檔輪替頻率

在 logrotate 中可以透過以下幾種方式來指定記錄檔的輪替頻率:

指令 說明
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 寄送記錄檔

以下指令可以讓 logrotate 透過 email 寄送記錄檔:

指令 說明
mail www@my.org 將過期的記錄檔寄送至 www@my.org。
nomail 不以 Email 寄送記錄檔。
mailfirst 寄送最新輪替的記錄檔。
maillast 寄送過期(將刪除)的記錄檔。

舊記錄檔目錄

以下指令可以讓 logrotate 將舊的記錄檔存放在獨立的目錄中:

指令 說明
olddir /var/log/old 將舊記錄檔放在 /var/log/old 目錄。
noolddir 將舊記錄檔放在相同目錄。
createolddir 0755 root admin 指定 0755 權限、root 使用者、admin 群組,建立舊記錄檔目錄。
nocreateolddir 不要自動建立舊記錄檔目錄。

以日期命名舊記錄檔

以下指令可以讓 logrotate 使用日期的方式來為舊的記錄檔命名:

指令 說明
dateext 使用日期的方式來為舊的記錄檔命名。
dateyesterday 以昨天的日期為檔案命名基準。
dateformat -%Y%m%d 設定日期格式,格式請參考 strftime 的文件。
nodateext 不使用日期來為舊的記錄檔命名。

清除敏感資料

如果在記錄檔中存在敏感性資料,可以使用以下 logrotate 指令,特別處理要進行銷毀的資料:

指令 說明
shred 使用 shred 銷毀要刪除的記錄檔。
shredcycles 3 設定 shred 抹除次數為 3。
noshred 不使用 shred 銷毀記錄檔。

測試 logrotate 設定

在修改完 logrotage 的設定之後,可以使用以下指令測試設定檔是否正確:

# 測試 logrotate 設定
sudo logrotate -d /etc/logrotate.conf

如果沒有出現錯誤訊息,就完成了。

由於 logrotate 是透過 cron 來觸發的,通常是寫在 /etc/cron.daily/logrotate 中,所以更改 logrotate 設定檔之後,只要確認設定無誤,就會自動生效,不需要重新載入設定檔的動作。

參考資料

  • LinuxTechi:How to Rotate and Compress Log Files in Linux with Logrotate
  • Tecmint:How to Setup and Manage Log Rotation Using Logrotate in Linux

分類:Linux

主要資訊欄

搜尋

近期文章

  • Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤
  • Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例
  • Linux 網路設定 ip 指令用法教學與範例
  • Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例
  • Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例
  • Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例
  • Linux 以 Cryptsetup 與 LUKS 加密磁碟教學與範例
  • Linux 使用 age 簡潔的加密、解密工具使用教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide