Logrotate 对服务器日志按照小时切割并压缩
背景介紹
?
對于互聯(lián)網(wǎng)小公司而言,對于服務(wù)日志的處理一般都不咋樣,在微服務(wù)使用之后之后可能稍微好一些,但還是有很多傳統(tǒng)的服務(wù),如:Tomcat,Nginx 等在日志處理的時候仍然不是很友好。主要是很多時候開發(fā)需要查看線上服務(wù)的日志便于查找 BUG,所以我們很多時候不是在查日志就是查日志的路上。
為了便于開發(fā)自己去查看日志于是便使用 Nginx 做了個日志下載站點。但是問題再次來了,那就是日志量太大,不好下載。怎么辦?壓縮唄。畢竟純文本壓縮比率超級高,100M 的文件能夠壓縮到幾 M 不香嗎?
但是即使壓縮之后,解壓后仍然很多,我們可能只需要查看的是幾點到幾點的,其它的對于我們沒有意義。要是能夠按照小時再切割一下就好了。
于是想到了 Linux 的 logrotate。但是默認的規(guī)則好像并不能滿足我們的需求,因為它最低的時間也是按天計算的。
這時候就需要另外一個東西了,crontab 定時任務(wù)。
?
?
關(guān)于 logrotate
?
一般在服務(wù)器初始化的時候這些工具都已經(jīng)存在的,但是為了保險,還是手動安裝一下:
yum -y install logrotate服務(wù)簡單的說明:
服務(wù)的主配置文件:/etc/logrotate.conf?
在主配置中可以看到?include /etc/logrotate.d 說明我們可以將用戶定義的配置直接放到這下面,系統(tǒng)會自動為我們執(zhí)行。當然,系統(tǒng)的并不能很好的滿足我們需求。
再看看配置模板:
日志文件絕對路徑 {各種參數(shù)... }參數(shù)包含:
| compress | 日志輪替時候?qū)εf日志就行 gzip 壓縮 |
| nocompress | 不壓縮 |
| daily | 按天輪替 |
| dateext | 使用當前日期命名舊日志 |
| dateformat .%s | 對日期進行格式定制 |
| ifempty | 日志沒有內(nèi)容的時候也進行輪替 |
| notifempty | 日志是空的就不輪替 |
| 將輪替后的文件發(fā)送到指定E-mail地址 | |
| nomail | 不發(fā)郵件 |
| copytruncate | 輪替時候先拷貝日志,備份拷貝文件,在清空本來的文件,這樣不會導(dǎo)致輪替后原文件消失,缺點就是可能丟失小部分日志 |
| monthly | 一個月輪替一次 |
| olddir | 輪替后日志文件放入指定的目錄 |
| rotate | 輪替最多保留之前的數(shù)據(jù)幾次 |
| size | 當日志增長到指定大小的時候開始輪替 |
| weekly | 按周輪替 |
| yearly | 按年輪替 |
| Missingok | 如果日志丟失,不報錯繼續(xù)滾動下一個日志 |
?
?
切割 Tomcat 日志示例?
?
說明:
1. 服務(wù)器上面有這樣一個 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內(nèi)容如下:
# MALL LOGROTATE /data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/catalina.out {notifempty copytruncaterotate 100missingokcompressdateextdateformat .%Y%m%d-%Holddir /data/TEST-01-BACKEND/MALL/MALL-WEB-Serice-8000/logs/archives }紅色部分需要注意,第一個是為了輪替之后原文件還存在,第二個為壓縮,第三個定義切割后文件的名稱。
?
2. 手動執(zhí)行一次輪替:
/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")?
只需要在配置中參數(shù)加入:
su root root?
3. 查看輪替后效果:
可以看到原本 300M 左右的被壓縮到 64 M。
?
4. 加入定時任務(wù):
crontab -e內(nèi)容如下:
# LOGROTATE 0 */2 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >> /tmp/logrotate.log?
這樣就能每隔兩小時輪替一次了!?
總結(jié)
以上是生活随笔為你收集整理的Logrotate 对服务器日志按照小时切割并压缩的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: B+/-Tree原理及mysql的索引分
- 下一篇: Linux watch命令详解