linux日志輪詢方案
logrotate 簡介
一般來說,日志是任何故障排除過程中非常重要的一部分,但這些日志會隨著時間增長。在這種情況下,我們需要手動執(zhí)行日志清理以回收空間,這是一件繁瑣的管理任務(wù)。為了解決這個問題,我們可以在 Linux 中配置 logrotate 程序,它可以自動執(zhí)行日志文件的輪換、壓縮、刪除和用郵件發(fā)出。
我們可以配置 logrotate 程序,以便每個日志文件可以在每天、每周、每月或當(dāng)它變得太大時處理。
logrotate軟件是一個日志管理工具,用于 切割日志,刪除舊的日志文件,并創(chuàng)建新的日志文件,起到“轉(zhuǎn)儲作用”,可以為系統(tǒng)節(jié)省磁盤空間。一般centos系統(tǒng)已經(jīng)自帶安裝好了。
logrotate是基于 crontab 運(yùn)行的,運(yùn)行時,logrotate 會調(diào)用配置文件 /etc/logrotate.conf 。可以在 /etc/logrotate.d 目錄里放置自定義好的配置文件,用來覆蓋 logrotate.conf 的缺省值。
logrotate 版本查看
root@test 10:14:51:/usr# logrotate --version logrotate 3.11.0
logrotate 配置文件
- 命令:
/usr/sbin/logrotate
- 配置文件:
/etc/logrotate.conf
這是 logrotate 的主配置文件。logrotate 還在 /etc/logrotate.d/
中存儲了特定服務(wù)的配置。
確保下面的那行包含在 /etc/logrotate.conf 中,以讀取特定服務(wù)日志配置。 include /etc/logrotate.d`
logrotate 歷史:
/var/lib/logrotate/logrotate.status
日志回滾原理
當(dāng)日志達(dá)到某個特定的大小,我們將日志分類,之前的日志保留一個備份,再產(chǎn)生的日志創(chuàng)建一個同名的文件保存新的日志.
重要的 logrotate 選項:
compress 通過gzip 壓縮轉(zhuǎn)儲以后的日志 nocompress 不做gzip壓縮處理 copytruncate 用于還在打開中的日志文件,把當(dāng)前日志備份并截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日志數(shù)據(jù)。 nocopytruncate 備份日志文件不過不截斷 create mode owner group 輪轉(zhuǎn)時指定創(chuàng)建新文件的屬性,如create 0777 nobody nobody nocreate 不建立新的日志文件 delaycompress 和compress 一起使用時,轉(zhuǎn)儲的日志文件到下一次轉(zhuǎn)儲時才壓縮 nodelaycompress 覆蓋 delaycompress 選項,轉(zhuǎn)儲同時壓縮。 missingok 如果日志丟失,不報錯繼續(xù)滾動下一個日志 errors address 專儲時的錯誤信息發(fā)送到指定的Email 地址 ifempty 即使日志文件為空文件也做輪轉(zhuǎn),這個是logrotate的缺省選項。 notifempty 當(dāng)日志文件為空時,不進(jìn)行輪轉(zhuǎn) mail address 把轉(zhuǎn)儲的日志文件發(fā)送到指定的E-mail 地址 nomail 轉(zhuǎn)儲時不發(fā)送日志文件 olddir directory 轉(zhuǎn)儲后的日志文件放入指定的目錄,必須和當(dāng)前日志文件在同一個文件系統(tǒng) noolddir 轉(zhuǎn)儲后的日志文件和當(dāng)前日志文件放在同一個目錄下 sharedscripts 運(yùn)行postrotate腳本,作用是在所有日志都輪轉(zhuǎn)后統(tǒng)一執(zhí)行一次腳本。如果沒有配置這個,那么每個日志輪轉(zhuǎn)后都會執(zhí)行一次腳本 prerotate 在logrotate轉(zhuǎn)儲之前需要執(zhí)行的指令,例如修改文件的屬性等動作;必須獨(dú)立成行 postrotate 在logrotate轉(zhuǎn)儲之后需要執(zhí)行的指令,例如重新啟動 (kill -HUP) 某個服務(wù)!必須獨(dú)立成行 daily 指定轉(zhuǎn)儲周期為每天 weekly 指定轉(zhuǎn)儲周期為每周 monthly 指定轉(zhuǎn)儲周期為每月 rotate count 指定日志文件刪除之前轉(zhuǎn)儲的次數(shù),0 指沒有備份,5 指保留5 個備份 dateext 使用當(dāng)期日期作為命名格式 dateformat .%s 配合dateext使用,緊跟在下一行出現(xiàn),定義文件切割后的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個參數(shù) size(或minsize) log-size 當(dāng)日志文件到達(dá)指定的大小時才轉(zhuǎn)儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem). 當(dāng)日志文件 >= log-size 的時候就轉(zhuǎn)儲。 以下為合法格式:(其他格式的單位大小寫沒有試過) size = 5 或 size 5 (>= 5 個字節(jié)就轉(zhuǎn)儲) size = 100k 或 size 100k size = 100M 或 size 100M
sshd 日志回滾實(shí)戰(zhàn)
修改配置文件
[root@ localhost cron.daily]# vim /etc/logrotate.conf /var/log/sshd.log { # 指定的是要切割的日志文件 missingok # 如果文件丟失不報錯 monthly # 每月輪換一次 create 0664 root utmp # 設(shè)置sshd.log這個文件的屬主和屬組 minsize 10M # 文件超過10M進(jìn)行回滾 rotate 2 # 日志進(jìn)行分割后,保留兩份歷史數(shù)據(jù) }
重啟rsyslog
[root@ localhost cron.daily]# systemctl restart rsyslog
強(qiáng)制切割
[root@ localhost cron.daily]# logrotate –vf /etc/logrotate.conf [root@ localhost cron.daily]# cd /var/log/ [root@ localhost log]# ll sshd.log -rw------- 1 root root 0 2019-11-29 14:00 sshd.log # 切割完之后,源文件大小變?yōu)?
日志切割,是可以按照文件的大小和時間來進(jìn)行切割
以系統(tǒng)日志/var/log/message做切割來簡單說明下:
- 第一次執(zhí)行完rotate(輪轉(zhuǎn))之后,原本的messages會變成messages.1,而且會制造一個空的messages給系統(tǒng)來儲存日志;
- 第二次執(zhí)行之后,messages.1會變成messages.2,而messages會變成messages.1,又造成一個空的messages來儲存日志!
- 如果僅設(shè)定保留三個日志(即輪轉(zhuǎn)3次)的話,那么執(zhí)行第三次時,則 messages.3這個檔案就會被刪除,并由后面的較新的保存日志所取代!也就是會保存最新的幾個日志。
- 日志究竟輪換幾次,這個是根據(jù)配置文件中的rotate參數(shù)來判定的。
測試和運(yùn)行 logrotate
如果等不及cron自動執(zhí)行日志輪轉(zhuǎn),想手動強(qiáng)制切割日志,需要加-f參數(shù);不過正式執(zhí)行前最好通過Debug選項來驗證一下(-d參數(shù)),這對調(diào)試也很重要
/usr/sbin/logrotate -f /etc/logrotate.d/nginx /usr/sbin/logrotate -d -f /etc/logrotate.d/nginx
具體 logrotate 命令格式如下:
logrotate [OPTION...] <configfile> -d, --debug :debug 模式,測試配置文件是否有錯誤。 -f, --force :強(qiáng)制轉(zhuǎn)儲文件。 -m, --mail=command :壓縮日志后,發(fā)送日志到指定郵箱。 -s, --state=statefile :使用指定的狀態(tài)文件。 -v, --verbose :顯示轉(zhuǎn)儲過程。
debug 模式
并不會真正進(jìn)行 rotate 或者 compress 操作,但是會打印出整個執(zhí)行的流程,和調(diào)用的腳本等詳細(xì)信息。
logrotate -d <configfile>
verbose 模式
會真正執(zhí)行操作,打印出詳細(xì)信息。
logrotate -v <configfile>
force 強(qiáng)制執(zhí)行
如果時間不符合要求,logrotate 也不會真正執(zhí)行時,如果想要立即執(zhí)行,查看結(jié)果,就使用到了 強(qiáng)制執(zhí)行模式。
logrotate -f <configfile>
添加 crontab 計劃任務(wù)
執(zhí)行 crontab -e
進(jìn)入 vim 模式,進(jìn)行編輯。
[root@root local]# crontab -e #每天 23點(diǎn)59分進(jìn)行日志切割 59 23 * * * /usr/sbin/logrotate -s /tmp/logrotate.status /etc/logrotate.d/tomcat
解釋:
59 23 * * * cron表達(dá)式
/usr/sbin/logrotate 啟動logrotate
-s /tmp/logrotate.status 保存執(zhí)行狀態(tài)
/etc/logrotate.d/tomcat 定時任務(wù) ,前提是有 tomcat 文件
tomcat 文件內(nèi)容:
/soft/tomcat/logs/catalina.out{ minsize 50M rotate 20 compress copytruncate notifempty }
crontab 常用命令
查看所有的定時任務(wù) crontab -l
[root@root local]# crontab -l .....(省略) 59 23 * * * /usr/sbin/logrotate -f /etc/logrotate_mytime/nginx_rotate .....(省略)
編輯定時任務(wù) crontab -e
[root@root local]# crontab -e # 進(jìn)入vim 模式 .....(省略) 59 23 * * * /usr/sbin/logrotate -f /etc/logrotate_mytime/nginx_rotate .....(省略)
常見應(yīng)用的 logrotate 配置
/var/log/nginx/*.log { # 可以指定多個路徑 daily # 日志輪詢周期,weekly,monthly,yearly rotate 30 # 保存30天數(shù)據(jù),超過的則刪除 size 100M # 超過100M時分割,單位K,M,G,優(yōu)先級高于daily compress # 切割后壓縮,也可以為nocompress delaycompress # 切割時對上次的日志文件進(jìn)行壓縮 dateext # 日志文件切割時添加日期后綴 dateformat -%Y-%m-%d missingok # 如果沒有日志文件也不報錯 notifempty # 日志為空時不進(jìn)行切換,默認(rèn)為ifempty create 640 nginx nginx # 使用該模式創(chuàng)建日志文件 sharedscripts # 所有的文件切割之后只執(zhí)行一次下面腳本 postrotate if [ -f /run/nginx.pid ]; then kill -USR1 `cat /run/nginx.pid` fi endscript }
logrotate 默認(rèn)運(yùn)行時間
logrotate 是基于cron 運(yùn)行的,所以這個時間是由 cron 控制的,具體可以查詢 cron 的配置文件/etc/crontab
。
舊版CentOS 的cron 的配置文件是 /etc/crontab
,新版CentOS 改為 /etc/anacrontab
。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux中使用crond工具創(chuàng)建定時任務(wù)的方法
這篇文章主要介紹了Linux中使用crond工具創(chuàng)建定時任務(wù)的方法,本文通過多種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02CentOS7連接XShell與網(wǎng)絡(luò)配置的方法
這篇文章主要介紹了如何使用CentOS7連接XShell與網(wǎng)絡(luò)配置的方法,可以更好的幫助大家工作和學(xué)習(xí),感興趣的小伙伴可以了解下2020-05-05SSM項目頻繁打成war包部署,使用tomcat和maven實(shí)現(xiàn)熱部署配置
這篇文章主要介紹了SSM項目頻繁打成war包部署操作頻繁?使用tomcat和maven實(shí)現(xiàn)熱部署配置,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11linux上安裝zookeeper 啟動和關(guān)閉的教程
這篇文章主要介紹了linux上安裝zookeeper 啟動和關(guān)閉的教程詳解,首先zookeeper運(yùn)行需要java環(huán)境所以必須先裝JDK,具體操作步驟大家一起看看本文吧2018-08-08CentOS8 Linux 8.0.1905的安裝過程(圖解)
這篇文章主要介紹了CentOS Linux 8.0.1905的安裝過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10