開筆
背景(廢話)
最近在做與數(shù)據(jù)相關(guān)的東西,需要處理大量日志文件。服務(wù)器日志的重要性,這里不需要贅述,nginx日志就是其中一種必須處理的。nginx的日志文件理論上是成線性持續(xù)增長的,那我們要處理這寫數(shù)據(jù),又該如何做,經(jīng)過調(diào)研,筆者找到了 Linux 系統(tǒng)提供的服務(wù) logrotate 。
logrotate 就是為管理會(huì)生成大量日志的系統(tǒng)而設(shè)計(jì)誕生的。它具備 自動(dòng)輪轉(zhuǎn)、壓縮、搬遷 和 郵件通知到日志系統(tǒng)的多想功能。每一個(gè)日志文件都可以按照 每天、每周、每月周期性處理,亦或是 增長到多大而觸發(fā)處理。
基礎(chǔ)知識(shí)
日志輪轉(zhuǎn)指的是實(shí)現(xiàn)對(duì)當(dāng)前日志歸檔,開始新的日志,刪除早期的日志。而日志,通常是應(yīng)用程序記錄的一些對(duì)系統(tǒng)管理員或者程序開發(fā)者有用的信息的文件,諸如正在執(zhí)行什么、發(fā)生了什么錯(cuò)誤等一系列信息。
當(dāng)我們需要跟蹤應(yīng)用的使用過程或是解決應(yīng)用的異常,日志便是最理想的工具。不幸的是日志記錄越多的信息,就意味著需要越多的硬盤空間,隨著時(shí)間推移,硬盤總有一天被耗光。日志如果不做輪轉(zhuǎn),就會(huì)無收斂地瘋漲下去,長此下去,必然會(huì)導(dǎo)致多方面拖累系統(tǒng)運(yùn)行。
logrotate 是如何工作的
通常,logrotate 是作為 corn 的一個(gè)每日任務(wù),周期性執(zhí)行的.在大部分的 Linux 發(fā)布版本系統(tǒng)里 (Centos 、Ubuntu、Fedora),我們都能找到
/etc/cron.daily/logrotate
如果您需要調(diào)整 logrotate 執(zhí)行的頻率,可以到 cron 配置中調(diào)整。如果有需要也可以看看 我關(guān)于 cron 的一篇文章。
配置
系統(tǒng)配置
在目錄 /etc 中可以看到關(guān)于 logrotate 的配置文件和對(duì)應(yīng)目錄,你也可以自己查看一些:
ls -al|grep logrotate
應(yīng)該會(huì)發(fā)現(xiàn) /etc/logrotate.conf 這個(gè)主配置文件,還有 /etc/lograte.d 這個(gè)目錄。在這個(gè)目錄里也許可以找到針對(duì)一個(gè)應(yīng)用級(jí)別的logrotate配置,這取決于你安裝了那些服務(wù)和安裝方式。一般,通過包管理工具安裝的應(yīng)用服務(wù),會(huì)同時(shí)創(chuàng)建配置文件到 /etc/logrotate.d目錄。
基本上,在這個(gè)目錄都會(huì)看到一個(gè) syslog 服務(wù)的配置文件,它是用于 logrotate 輪轉(zhuǎn)系統(tǒng)日志的配置。
應(yīng)用配置
針對(duì)每一個(gè)應(yīng)用服務(wù),都可以有自己的日志輪轉(zhuǎn)配置.筆者以一個(gè)web服務(wù)器的access日志作為例子:
- nginx 安裝在
/usr/local/nginx目錄 - nginx 配置了 access_log 到
/var/log/nginx/access.log - 輪轉(zhuǎn)需要求:按小時(shí)輪轉(zhuǎn) access 日志。
我們?yōu)檫@個(gè)需求創(chuàng)建一個(gè)配置文件:/etc/logrotate.d/nginx-access.conf文件內(nèi)容如下:
/var/log/nginx/access.log {
size 2M
create 777 www web
rotate 65535
copytruncate
compress
nomail
olddir /var/log/nginx/old-logs/
}
緊接著,在cron服務(wù)中配置為每小時(shí)執(zhí)行就實(shí)現(xiàn)了,如此簡單,若有cron配置不清楚的地方,可以查看筆者關(guān)于 cron 的另一篇分享。
- crontab -e
- 01 * * * * logrotate -f /etc/logrotate.d/nginx-access.conf
- crond restart
至此,您就已經(jīng)可以利用logrotate 來便捷的管理nginx服務(wù)器的日志了。在此基礎(chǔ)上,您可以根據(jù)自己的具體需要,管理任何日志文件。更具體和詳細(xì)的幫助可以使用:
man logrotate
命令查看。
參考文檔
ps
偶然發(fā)現(xiàn) logrotate-github(點(diǎn)這里) 居然被放到github上了