運維日誌切割--logrotate

1、logrotate介紹

logrotate程序是一個日誌文件管理工具。用於分割日誌文件,刪除舊的日誌文件,並建立新的日誌文件,起到"轉儲"做用。能夠節省磁盤空間。例如,你能夠設置logrotate,讓/var/log/logfile日誌文件每30天輪循,並刪除超過6個月的日誌。配置完後,logrotate的運做徹底自動化,沒必要進行任何進一步的人爲干預。php

2、logrotae配置使用

2.一、logrotate安裝

1)系統版本html

[root@test206 ~]#cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
[root@test206 ~]#uname -r
3.10.0-957.21.3.el7.x86_64

2)默認centos系統安裝自帶logrotate,直接使用yum 安裝java

3)安裝包說明node

[root@test206 ~]#rpm -ql logrotate
/etc/cron.daily/logrotate   #Logrotate是基於CRON來運行的,其腳本是/etc/cron.daily/logrotate
/etc/logrotate.conf         #logrotate 自身的配置文件
/etc/logrotate.d            #配置切割設置的目錄
/etc/rwtab.d/logrotate
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.8.6
/usr/share/doc/logrotate-3.8.6/CHANGES
/usr/share/doc/logrotate-3.8.6/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate
/var/lib/logrotate/logrotate.status  #日誌切割的狀態信息

#注意
logrotate的配置文件是/etc/logrotate.conf,一般不須要對它進行修改。
日誌文件的輪循設置在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下。

2.二、配置參數說明

2.2.一、主配置文件

[root@test206 ~]#cat /etc/logrotate.conf 
weekly         #默認每一週執行一次rotate輪轉工做
rotate 4       #保留多少個日誌文件(輪轉幾回).默認保留四個.就是指定日誌文件刪除以前輪轉的次數,0 指沒有備份
create         #自動建立新的日誌文件,新的日誌文件具備和原來的文件相同的權限;由於日誌被更名,所以要建立一個新的來繼續存儲以前的日誌
dateext        #切割後的日誌文件以當前日期爲格式結尾,如xxx.log-20131216,註釋掉,切割出來是按數字遞增,即xxx.log-1這種格式          
compress       #是否經過gzip壓縮轉儲之後的日誌文件,如xxx.log-20131216.gz ;若是不須要壓縮,註釋掉就行
include /etc/logrotate.d  #將 /etc/logrotate.d/ 目錄中的全部文件都加載進來

# 這個 wtmp 可記錄用戶登陸系統及系統重啓的時間
# 由於有 minsize 的參數,所以不見得每月必定會執行一次喔.要看文件大小。
/var/log/wtmp {           #僅針對 /var/log/wtmp 所設定的參數
    monthly               #每個月一次切割,取代默認的一週
    create 0664 root utmp #文件大小超過 1M 後纔會切割
	minsize 1M         #指定新建的日誌文件權限以及所屬用戶和組
    rotate 1               #只保留一個日誌.
}

/var/log/btmp {            ##僅針對 /var/log/wtmp 所設定的參數
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

2.2.二、日誌輪轉腳本

#Logrotate是基於CRON來運行的,其腳本是/etc/cron.daily/logrotate,日誌輪轉是系統自動完成的。
[root@test206 ~]#cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

2.2.二、其餘重要參數說明

compress                            #經過gzip 壓縮轉儲之後的日誌
nocompress                          #不作gzip壓縮處理
copytruncate                        #用於還在打開中的日誌文件,把當前日誌備份並截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日誌數據。
nocopytruncate                      #備份日誌文件不過不截斷
create mode owner group             #輪轉時指定建立新文件的屬性,如create 0777 nobody nobody
nocreate                            #不創建新的日誌文件
delaycompress                       #和compress 一塊兒使用時,轉儲的日誌文件到下一次轉儲時才壓縮
nodelaycompress                     #覆蓋 delaycompress 選項,轉儲同時壓縮。
missingok                           #若是日誌丟失,不報錯繼續滾動下一個日誌
errors address                      #專儲時的錯誤信息發送到指定的Email 地址
ifempty                             #即便日誌文件爲空文件也作輪轉,這個是logrotate的缺省選項。
notifempty                          #當日志文件爲空時,不進行輪轉
mail address                        #把轉儲的日誌文件發送到指定的E-mail 地址
nomail                              #轉儲時不發送日誌文件
olddir directory                    #轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件在同一個文件系統
noolddir                            #轉儲後的日誌文件和當前日誌文件放在同一個目錄下
sharedscripts                       #運行postrotate腳本,做用是在全部日誌都輪轉後統一執行一次腳本。若是沒有配置這個,那麼每一個日誌輪轉後都會執行一次腳本
prerotate                           #在logrotate轉儲以前須要執行的指令,例如修改文件的屬性等動做;必須獨立成行
postrotate                          #在logrotate轉儲以後須要執行的指令,例如從新啓動 (kill -HUP) 某個服務!必須獨立成行
daily                               #指定轉儲週期爲天天
weekly                              #指定轉儲週期爲每週
monthly                             #指定轉儲週期爲每個月
rotate count                        #指定日誌文件刪除以前轉儲的次數,0 指沒有備份,5 指保留5 個備份
dateext                             #使用當期日期做爲命名格式
dateformat .%s                      #配合dateext使用,緊跟在下一行出現,定義文件切割後的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個參數
size(或minsize) log-size            #當日志文件到達指定的大小時才轉儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).當日志文件 >= log-size 的時候就轉儲。 如下爲合法格式:(其餘格式的單位大小寫沒有試過)
#size = 5 或 size 5 (>= 5 個字節就轉儲)
#size = 100k 或 size 100k
#size = 100M 或 size 100M

2.三、logrotate相關命令

#logrotate命令格式:
logrotate [OPTION...] <configfile>
-d, --debug  #debug模式,測試配置文件是否有錯誤。
-f, --force  #強制轉儲文件。
-m, --mail=command  #壓縮日誌後,發送日誌到指定郵箱。
-s, --state=statefile  #使用指定的狀態文件。
-v, --verbose  #顯示轉儲過程。

#若是等不及cron自動執行日誌輪轉,想手動強制切割日誌,須要加-f參數;不過正式執行前最好經過Debug選項來驗證一下(-d參數),這對調試也很重要
/usr/sbin/logrotate -f /etc/logrotate.d/nginx
/usr/sbin/logrotate -d -f /etc/logrotate.d/nginx

#根據日誌切割設置進行操做,並顯示詳細信息
/usr/sbin/logrotate -v /etc/logrotate.conf
/usr/sbin/logrotate -v /etc/logrotate.d/php

#根據日誌切割設置進行執行,並顯示詳細信息,可是不進行具體操做,debug模式
/usr/sbin/logrotate -d /etc/logrotate.conf
/usr/sbin/logrotate -d /etc/logrotate.d/nginx

#查看各log文件的具體執行狀況
cat /var/lib/logrotate/logrotate.status

3、logrotate切割tomcat  catalina.out日誌

通常在部署Tomcat後,運行久了,catalina.out文件會愈來愈大,甚至上G,對系統的穩定形成了必定的影響linux

3.一、定義tomcat  pid文件

[root@test206 ~]#vim /usr/java/tomcat/dianchou-app-boss/bin/catalina.sh
# Get standard environment variables
PRGDIR=`dirname "$PRG"`
CATALINA_PID=/usr/java/tomcat/dianchou-app-boss/tomcat.pid

3.二、重啓tomcat並查看pid文件

[root@test206 bin]#./shutdown.sh
[root@test206 bin]#./startup.sh
[root@test206 bin]#cd ../
[root@test206 dianchou-app-boss]#ll tomcat.pid 
-rw-r--r-- 1 root root 6 Nov 12 20:48 tomcat.pid
[root@test206 dianchou-app-boss]#cat tomcat.pid 
19472

3.三、配置logrotate切割文件

[root@test206 ~]#vim /etc/logrotate.d/tomcat_appboss_catalina
/usr/java/tomcat/dianchou-app-boss/logs/catalina.out {
        daily
        rotate 15
        missingok
        notifempty
        dateext
        compress
        delaycompress
        sharedscripts
        create 644 root root
        postrotate
                if [ -f /usr/java/tomcat/dianchou-app-boss/tomcat.pid ]; then
                       kill -USR1 `cat /usr/java/tomcat/dianchou-app-boss/tomcat.pid` #測試殺死了進程,但沒從新啓動
		       rm -f /usr/java/tomcat/dianchou-app-boss/tomcat.pid  #刪除pid文件,否則報錯
		       /usr/java/tomcat/dianchou-app-boss/bin/startup.sh    #重啓tomcat,從新生成pid文件
                fi
        endscript
}

#USR1信號解釋
一、USR1亦一般被用來告知應用程序重載配置文件;例如,向Apache HTTP服務器發送一個USR1信號將致使如下步驟的發生:中止接受新的鏈接,等待當前鏈接中止,從新載入配置文件,從新打開日誌文件,重啓服務器,從而實現相對平滑的不關機的更改。
二、在沒有執行kill -USR1 `cat ${pid_path}`以前,即使已經對文件執行了mv命令而改變了文件名稱,tomcat仍是會向新命名的文件" xxx.out_ 20180619"照常寫入日誌數據的。緣由在於:linux系統中,內核是根據文件描述符來找文件的。

3.四、測試執行

[root@test206 logs]#ll catalina.out*
-rw-r--r-- 1 root root 6241051 Nov 12 20:48 catalina.out
[root@test206 logs]#logrotate -vf /etc/logrotate.d/tomcat_appboss_catalina 
reading config file /etc/logrotate.d/tomcat_appboss_catalina
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /usr/java/tomcat/dianchou-app-boss/logs/catalina.out  forced from command line (15 rotations)
empty log files are not rotated, old logs are removed
considering log /usr/java/tomcat/dianchou-app-boss/logs/catalina.out
  log needs rotating
rotating log /usr/java/tomcat/dianchou-app-boss/logs/catalina.out, log->rotateCount is 15
dateext suffix '-20191112'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /usr/java/tomcat/dianchou-app-boss/logs/catalina.out to /usr/java/tomcat/dianchou-app-boss/logs/catalina.out-20191112
creating new /usr/java/tomcat/dianchou-app-boss/logs/catalina.out mode = 0644 uid = 0 gid = 0
running postrotate script
Using CATALINA_BASE:   /usr/java/tomcat/dianchou-app-boss
Using CATALINA_HOME:   /usr/java/tomcat/dianchou-app-boss
Using CATALINA_TMPDIR: /usr/java/tomcat/dianchou-app-boss/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/java/tomcat/dianchou-app-boss/bin/bootstrap.jar:/usr/java/tomcat/dianchou-app-boss/bin/tomcat-juli.jar
Using CATALINA_PID:    /usr/java/tomcat/dianchou-app-boss/tomcat.pid
Tomcat started.
[root@test206 logs]#ll catalina.out*
-rw-r--r-- 1 root root    4594 Nov 12 20:56 catalina.out
-rw-r--r-- 1 root root 6241051 Nov 12 20:48 catalina.out-20191112  #後續切割時會對前面的日誌進行壓縮

3.五、設置定時任務

[root@test206 ~]#crontab -l
#logrotate tomcat
59 23 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat_appboss_catalina &>/dev/null

參考文檔:nginx

http://www.javashuo.com/article/p-rzhvcmfk-m.htmlbootstrap

https://www.cnblogs.com/along21/p/9198427.htmlvim

相關文章
相關標籤/搜索