Linux logrotate 日志管理


開發離不開日志,日志文件包含了關於系統中發生的事件的有用信息,在排障過程中或者系統性能分析時經常被用到。在小項目服務器比較閑的情況下,可能不需要什么處理。但是這絕對不是一個好的處理方式,對於大型項目,日志的打印特別多,日志文件大小會快速變大,占用特別大的磁盤空間,所以我們需要對於項目的日志進行管理,而logrotate就是一個linux自帶的日志管理工具。

logrotate簡介:

logrotate軟件是一個十分好使的日志管理工具,它可以自動對日志進行截斷(或輪循)、壓縮以及刪除舊的日志文件。用於非分隔日志,刪除舊的日志文件,並創建新的日志文件,起到“轉儲作用”,可以為系統節省磁盤空間。

配置路徑:

/etc目錄下,logrotate.conf是logrotate的配置文件,不需要做修改,日志設置在logrotate.d目錄下,這里我的系統中已經添加了ceph分布式存儲與haproxy高可用的日志配置。

logrotate.conf配置解釋:

 

 

weekly    #默認每周執行一次日志輪詢

rotate 4   #默認保留4個日志文件

create    #自動創建新的日志文件,新的文件和原來的文件具有相同的權限

dateext   #切割后的日志文件以當前日期為結尾,如xxx.log-2018-2-28

include /etc/logrotate.d      #將logrotate.d目錄里的文件加載進來

/var/log/wtmp {            #針對wtmp日志設定的參數

    monthly               #每個月切割一次,取代默認的一周

    create 0664 root utmp   #新建日志權限為0664,屬主為root,屬組為utmp

    minsize 1M            #文件大小超過一周后才會切割

    rotate 1               #只保留一個日志

}

/var/log/btmp {

    missingok                   #如果日志丟失,不報錯繼續滾動下一個日志

    monthly                        #每個月切割一次,取代默認的一周

    create 0600 root utmp  #新建日志權限為0664,屬主為root,屬組為utmp

    rotate 1                #只保留一個日志

}

logrotate常用參數:

compress                     通過gzip 壓縮轉儲以后的日志

nocompress                   不做gzip壓縮處理

copytruncate                  用於還在打開中的日志文件,把當前日志備份並截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日志數據。

nocopytruncate                備份日志文件不過不截斷

create mode owner group        輪轉時指定創建新文件的屬性,如create 0777 nobody nobody

nocreate                      不建立新的日志文件

delaycompress                 和compress 一起使用時,轉儲的日志文件到下一次轉儲時才壓縮

nodelaycompress               覆蓋 delaycompress 選項,轉儲同時壓縮。

missingok                     如果日志丟失,不報錯繼續滾動下一個日志

errors address                  轉儲時的錯誤信息發送到指定的Email 地址

ifempty                       即使日志文件為空文件也做輪轉,這個是logrotate的缺省選項。

notifempty                    當日志文件為空時,不進行輪轉

mail address                   把轉儲的日志文件發送到指定的E-mail 地址

nomail                       轉儲時不發送日志文件

olddir directory                轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統

noolddir                     轉儲后的日志文件和當前日志文件放在同一個目錄下

sharedscripts                 運行postrotate腳本,作用是在所有日志都輪轉后統一執行一次腳本。如果沒有配置這個,那么每個日志輪轉后都會執行一次腳本

prerotate             在logrotate轉儲之前需要執行的指令,例如修改文件的屬性等動作;必須獨立成行

postrotate            在logrotate轉儲之后需要執行的指令,例如重新啟動 (kill -HUP) 某個服務!必須獨立成行

daily                 指定轉儲周期為每天

weekly               指定轉儲周期為每周

monthly              指定轉儲周期為每月

rotate count           指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份

dateext               使用當期日期作為命名格式

dateformat .%s         配合dateext使用,緊跟在下一行出現,定義文件切割后的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個參數

size(或minsize) log-size   當日志文件到達指定的大小時才轉儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).

當日志文件 >= log-size 的時候就轉儲。 以下為合法格式:(其他格式的單位大小寫沒有試過)

size = 5 或 size 5 (>= 5 個字節就轉儲)

size = 100k 或 size 100k

size = 100M 或 size 100M

我們需要配置一個日志管理的話,在logrotate.d路徑下創建文件即可,文件內容書寫格式與logrotate.conf一致,下面看幾個例子:

1.

 

 2.

 

 

從這倆個例子可以看出來,這里面的參數在上面都是有解釋的,所以我們在使用的時候只需要找到合適的參數寫入就OK了。

另外從第二個例子可以看到,日志文件的匹配實際上是可以正則表達式的,對於某一個路徑下的log日志進行統一的管理,這可以說是日志管理使用的一個簡單使用了。

logrotate的查錯:

這是按照上面的方式寫好配置文檔,我們如何能夠確定logrotate的設置是否生效了呢。看日志是一個不能少的方式:

logrotate自身的日志通常存放於/var/lib/logrotate/status目錄。如果處於排障目的,我們想要logrotate記錄到任何指定的文件,我們可以指定像下面這樣從命令行指定。

# logrotate -vf –s /var/log/logrotate-status /etc/logrotate.d/log-file

其次運行logrotate:

logrotate可以在任何時候從命令行手動調用。

要調用為/etc/lograte.d/下配置的所有日志調用logrotate:

# logrotate /etc/logrotate.conf

要為某個特定的配置調用logrotate:

# logrotate /etc/logrotate.d/log-file

還可以演練:

排障過程中的最佳選擇是使用‘-d’選項以預演方式運行logrotate。要進行驗證,不用實際輪循任何日志文件,可以模擬演練日志輪循並顯示其輸出。

# logrotate -d /etc/logrotate.d/log-file

正如我們從上面的輸出結果可以看到的,logrotate判斷該輪循是不必要的。如果文件的時間小於一天,這就會發生了。

關於logrotate查錯更多的可以查看:https://linux.cn/article-4126-1.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM