『學了就忘』Linux日誌管理 — 92、日誌輪替

繁華似錦Fighting發表於2021-12-24

1、日誌檔案的命名規則

日誌輪替最主要的作用就是把舊的日誌檔案移動並改名,同時建立新的空日誌檔案,當舊日誌檔案超出儲存的範圍之後,就會進行刪除。

那麼舊的日誌檔案改名之後,如何命名呢?

主要依靠/etc/logrotate.conf配置檔案中dateext引數:

  • 如果配置檔案中擁有dateext引數,那麼日誌會用日期來作為日誌檔案的字尾。
    例如secure-20200616。這樣的話日誌檔名不會重疊,所以也就不需要日誌檔案的改名,只需要儲存指定的日誌個數,刪除多餘的日誌檔案即可。
  • 如果配置檔案中沒有dateext引數,那麼日誌檔案就需要進行改名了。
    當第一次進行日誌輪替時,當前的secure日誌會自動改名為secure.1,然後新建secure日誌,用來儲存新的日誌。
    當第二次進行日誌輪替時,secure.1會自動改名為secure.2,當前的secure日誌會自動改為secure.1,然後也會新建secure日誌,用來儲存新的日誌,以此類推。

總結:日誌輪替步驟

  • 首先要切割日誌檔案,通過/etc/logrotate.conf配置檔案進行配置。
  • 進行輪替。比如設定一天一個日誌檔案,我只保留30個日誌檔案,也就是說保留最近30天的日誌檔案,那麼第31天,就會保留第31天的日誌檔案,同時刪除第一天的日誌檔案,相當於一個佇列結構。

注意:

有些服務的日誌自帶切割檔案的功能,但是還是推薦使用Linux系統的自帶日誌輪替配置。因為Linux系統的自帶日誌輪替配置包括檔案的切換和輪替,但有些服務自帶的日誌管理,只包含日誌檔案的切割功能,那多餘的日誌檔案,就需要手工進行刪除,比如apache服務中自帶的日誌管理。

還有一個點就是apache服務有自己的日誌管理,你學會了,也就只能熟練操作apache服務的日誌檔案,但是其他的服務如果也有自己的日誌管理功能,那麼我們要學會很多種服務的日誌管理方式,會非常的麻煩。

Linux系統自己的日誌輪替功能,也就是通過/etc/logrotate.conf配置檔案進行配置的日誌輪替,理論上無論什麼日誌,RPM包方式安裝服務的日誌,原始碼包方式安裝服務的日誌,logrotate配置檔案都能夠識別。

RPM包方式安裝服務的日誌會自動的加入logrotate輪替,一般不需要你介入。

而原始碼包方式安裝服務的日誌,需要手工把該服務的日誌加入到logrotate.conf配置檔案中。

2、logrotate配置檔案說明

[root@localhost ~]# vim /etc/logrotate.conf 

# see "man logrotate" for details
# rotate log files weekly
# 每週對日誌檔案進行一次輪替。
weekly

# keep 4 weeks worth of backlogs
# 儲存4個日誌檔案,也就是說如果進行了5次日誌輪替,就會刪除第一個備份日誌檔案。
rotate 4

# create new (empty) log files after rotating old ones
# 日誌輪替時,自動建立新的日誌檔案。
# 以cron.log為例,會把cron.log檔案改成日期格式的檔名,
# 然後在建立一個新的空的cron.log日誌檔案。
create

# use date as a suffix of the rotated file
# 使用日期作為日誌輪替檔案的字尾。
# RedHat 5 預設是不開啟的, RedHat 6 以後預設是開啟。
dateext

# uncomment this if you want your log files compressed
# 日誌檔案是否壓縮。如果取消註釋,則日誌會在轉儲的同時進行壓縮。
# 也就是說除了現在正在存取的日誌檔案,其他的日誌檔案都是壓縮格式的方式儲存。
# compress


# 說明:
# 以上日誌資訊配置為預設配置,如果需要輪替的日誌沒有設定獨立的引數,那麼都會遵守以上引數。
# 你可以理解為logrotate的通用配置或者是環境變數,對所有的日誌都生效。
# 如果輪替日誌配置了獨立引數,那麼獨立引數優先順序更高,也就是上面的通用配置失效。


# RPM packages drop log rotation information into this directory
# 包含/etc/logrotate.d/目錄中所有的子配置檔案。
# 也就是說會把這個目錄中所有子配置檔案讀取進來,進行日誌輪替。
# 換句話說就是/etc/logrotate.d目錄中的檔案,也是被logrotate管理的。
include /etc/logrotate.d


# 以下兩個輪替日誌有自己的獨立引數,如果和預設的引數衝突,則獨立引數生效。
# no packages own wtmp and btmp -- we'll rotate them here
# 以下引數僅對此目錄有效。
/var/log/wtmp {
    # 每月對日誌檔案進行一次輪替。
    monthly
    # 建立的新日誌檔案,許可權是0664,所有者是root,所屬組是utmp組。
    create 0664 root utmp
        # 日誌檔案最小輪替大小是1MB。
        # 也就是日誌一定要超過1MB才會輪替,否則就算時間達到一個月,也不進行日誌轉儲。
        minsize 1M
    # 保留一個日誌備份。也就是隻有wtmp和wtmp.1日誌保留而已。
    # 換句話說也就是除了我本身日誌檔案,再多儲存一個日誌檔案。
    rotate 1
}

# 以下引數只對/var/log/btmp生效。
/var/log/btmp {
    # 果日誌不存在,則忽略該日誌的警告資訊。
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

3、logrotate配置檔案的主要引數

如下表:

引數 引數說明
daily 日誌的輪替週期是每天。
weekly 日誌的輪替週期是每週。
monthly 日誌的輪替週期是每月。
rotate 數字 保留的日誌檔案的個數。0指沒有備份。
compress 日誌輪替時,舊的日誌進行壓縮。
create mode owner group 建立新日誌,同時指定新日誌的許可權與所有者和所屬組。如create 0600 root utmp
mail address 當日志輪替時,輸出的內容通過郵件傳送到指定的郵件地址。如mail xxxx@lamp.net
missingok 如果日誌不存在,則忽略該日誌的警告資訊。
notifempty 如果日誌為空檔案,則不進行日誌輪替。
minsize 大小 日誌輪替的最小值。也就是日誌一定要達到這個最小值才會輪替,否則就算時間達到也不輪替。
size 大小 日誌只有大於指定大小才進行日誌輪替,而不是按照時間輪替。如size 100k。(也就是隻按大小,不按時間)
dateext 使用日期作為日誌輪替檔案的字尾。如secure-20200616
sharedscripts 在此關鍵字之後的指令碼只執行一次。(要使用下面兩個引數,該引數一定要使用)
prerotate/endscript 在日誌輪替之前執行指令碼命令。endscript標示prerotate指令碼結束。
postrotate/endscript 在日誌輪替之後執行指令碼命令。endscript標示postrotate指令碼結束。

這些引數中較為不好理解的應該就是prerotate/endscriptpostrotate/endscript引數了,我們利用"man logrotate"中的列子來解釋下這兩個引數。

例如:

# 日誌輪替的是/var/log/httpd/中RPM包安裝的apache正確訪問日誌和錯誤日誌。
/var/1og/httpd/access.log
/var/1og/httpd/error.log
{
    # 輪替5次。
    rotate 5
    # 資訊傳送到指定郵箱。
    mail www@sina.com
    # 日誌大於100KB時才進行日誌輪替,不再按照時間輪替。
    size 100k

    # 以下指令碼只執行一次。
    sharedscripts
    # 在日誌輪替結束之後,執行以下指令碼。
    postrotate
        # 重啟apache服務的相關服務。
        /usr/bin/killall -HUP httpd
    # 指令碼結束。
    endscript
}

提示:

  • prerotatepostrotate主要用於在日誌輪替的同時,執行指定的指令碼,一般用於日誌輪替之後重啟服務。
  • 這裡強調,如果你的日誌是寫入rsyslog服務的配置檔案的,那麼把新日誌加入logrotate後,一定要重啟rsyslog服務,否則你會發現雖然新日誌建立了,但是資料還是寫入了舊的日誌當中。
  • 那是因為雖然logrotate知道日誌輪替了,但是rsyslog服務卻並不知道。
  • 同理,如果你的日誌不是被rsyslog管理,如原始碼包安裝的Apache、Nginx等服務,則需要重啟Apache或Nginx服務,否則日誌也不能正常輪替。
  • 所以通常操作的方式是,日誌檔案輪替完成之後,重啟一下伺服器,所有的相關服務都進行了重啟,從而使輪替後的配置檔案都能正常適用。

相關文章