Logrotate 對服務器日志按照小時切割並壓縮


背景介紹

 

對於互聯網小公司而言,對於服務日志的處理一般都不咋樣,在微服務使用之后之后可能稍微好一些,但還是有很多傳統的服務,如:Tomcat,Nginx 等在日志處理的時候仍然不是很友好。主要是很多時候開發需要查看線上服務的日志便於查找 BUG,所以我們很多時候不是在查日志就是查日志的路上。

為了便於開發自己去查看日志於是便使用 Nginx 做了個日志下載站點。但是問題再次來了,那就是日志量太大,不好下載。怎么辦?壓縮唄。畢竟純文本壓縮比率超級高,100M 的文件能夠壓縮到幾 M 不香嗎?

但是即使壓縮之后,解壓后仍然很多,我們可能只需要查看的是幾點到幾點的,其它的對於我們沒有意義。要是能夠按照小時再切割一下就好了。

於是想到了 Linux 的 logrotate。但是默認的規則好像並不能滿足我們的需求,因為它最低的時間也是按天計算的。

這時候就需要另外一個東西了,crontab 定時任務。

 

 

關於 logrotate

 

一般在服務器初始化的時候這些工具都已經存在的,但是為了保險,還是手動安裝一下:

yum -y install logrotate

服務簡單的說明:

服務的主配置文件:/etc/logrotate.conf 

在主配置中可以看到 include /etc/logrotate.d 說明我們可以將用戶定義的配置直接放到這下面,系統會自動為我們執行。當然,系統的並不能很好的滿足我們需求。

再看看配置模板:

日志文件絕對路徑 {
    各種參數...
}

參數包含:

參數 說明
compress 日志輪替時候對舊日志就行 gzip 壓縮
nocompress 不壓縮
daily 按天輪替
dateext 使用當前日期命名舊日志
dateformat .%s 對日期進行格式定制
ifempty 日志沒有內容的時候也進行輪替
notifempty 日志是空的就不輪替
mail 將輪替后的文件發送到指定E-mail地址
nomail 不發郵件
copytruncate 輪替時候先拷貝日志,備份拷貝文件,在清空本來的文件,這樣不會導致輪替后原文件消失,缺點就是可能丟失小部分日志
monthly 一個月輪替一次
olddir 輪替后日志文件放入指定的目錄
rotate 輪替最多保留之前的數據幾次
size 當日志增長到指定大小的時候開始輪替
weekly 按周輪替
yearly 按年輪替
Missingok 如果日志丟失,不報錯繼續滾動下一個日志

 

 

切割 Tomcat 日志示例 

 

說明:

1. 服務器上面有這樣一個 tomcat 日志:/data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/catalina.out

2. 我們想將這個文件按每兩小時切割一次並壓縮,保留 100 個舊的切割,切割的文件保存到:/data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/archives 目錄下。

 

開始配置:

1. 添加 logrotate 配置文件:

vi /etc/logrotate.d/tomcat

內容如下:

# MALL LOGROTATE
/data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/catalina.out {
    notifempty 
    copytruncate
    rotate 100
    missingok
    compress
    dateext
    dateformat .%Y%m%d-%H
    olddir /data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/archives
}

紅色部分需要注意,第一個是為了輪替之后原文件還存在,第二個為壓縮,第三個定義切割后文件的名稱。

 

2. 手動執行一次輪替:

/usr/sbin/logrotate -vf /etc/logrotate.d/tomcat

這里如果報錯:because parent directory has insecure permissions (It's world writable or writable by group which is not "root") 

只需要在配置中參數加入:

su root root

 

3. 查看輪替后效果:

可以看到原本 300M 左右的被壓縮到 64 M。

 

4. 加入定時任務:

crontab -e

內容如下:

# LOGROTATE
0 */2 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >> /tmp/logrotate.log

 

這樣就能每隔兩小時輪替一次了! 


免責聲明!

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



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