『學了就忘』Linux日誌管理 — 92、日誌輪替
- 2021 年 12 月 24 日
- 筆記
- 測試基礎必會技能 - Linux系統
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 [email protected] 。 |
missingok |
如果日誌不存在,則忽略該日誌的警告資訊。 |
notifempty |
如果日誌為空文件,則不進行日誌輪替。 |
minsize 大小 |
日誌輪替的最小值。也就是日誌一定要達到這個最小值才會輪替,否則就算時間達到也不輪替。 |
size 大小 |
日誌只有大於指定大小才進行日誌輪替,而不是按照時間輪替。如size 100k 。(也就是只按大小,不按時間) |
dateext |
使用日期作為日誌輪替文件的後綴。如secure-20200616 。 |
sharedscripts |
在此關鍵字之後的腳本只執行一次。(要使用下面兩個參數,該參數一定要使用) |
prerotate/endscript |
在日誌輪替之前執行腳本命令。endscript 標示prerotate 腳本結束。 |
postrotate/endscript |
在日誌輪替之後執行腳本命令。endscript 標示postrotate 腳本結束。 |
這些參數中較為不好理解的應該就是prerotate/endscript
和postrotate/endscript
參數了,我們利用"man logrotate"
中的列子來解釋下這兩個參數。
例如:
# 日誌輪替的是/var/log/httpd/中RPM包安裝的apache正確訪問日誌和錯誤日誌。
/var/1og/httpd/access.log
/var/1og/httpd/error.log
{
# 輪替5次。
rotate 5
# 資訊發送到指定郵箱。
mail [email protected]
# 日誌大於100KB時才進行日誌輪替,不再按照時間輪替。
size 100k
# 以下腳本只執行一次。
sharedscripts
# 在日誌輪替結束之後,執行以下腳本。
postrotate
# 重啟apache服務的相關服務。
/usr/bin/killall -HUP httpd
# 腳本結束。
endscript
}
提示:
prerotate
和postrotate
主要用於在日誌輪替的同時,執行指定的腳本,一般用於日誌輪替之後重啟服務。- 這裡強調,如果你的日誌是寫入
rsyslog
服務的配置文件的,那麼把新日誌加入logrotate
後,一定要重啟rsyslog
服務,否則你會發現雖然新日誌建立了,但是數據還是寫入了舊的日誌當中。 - 那是因為雖然
logrotate
知道日誌輪替了,但是rsyslog
服務卻並不知道。 - 同理,如果你的日誌不是被
rsyslog
管理,如源碼包安裝的Apache、Nginx等服務,則需要重啟Apache或Nginx服務,否則日誌也不能正常輪替。 - 所以通常操作的方式是,日誌文件輪替完成之後,重啟一下伺服器,所有的相關服務都進行了重啟,從而使輪替後的配置文件都能正常適用。