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