shell編程---linux的應用日誌監控和定期處理

具體場景:

Tomcat應用服務器產生的日誌量非常大,如果不及時處理其日誌,會導致服務器磁盤被塞滿,從而導致應用程序無法繼續正常運行。針對以上問題我們可以按照一定規則對其日誌進行處理(可以是移走,也可以是刪除)。
規則:當Tomcat日誌路徑下所有日誌文件總大小超過xx兆時,刪除掉日期最早的日誌文件,這樣可以保證硬盤空間的相對穩定,也保留最近期的日誌文件。

解答:

命令行測試
[root@myhost logs]# pwd
/usr/local/tomcat/logs
[root@myhost logs]# ll
總用量 34244
-rw-r--r--. 1 test root   38865 2月  26 15:12 catalina.2019-02-26.log
-rw-r--r--. 1 test root    1035 2月  28 10:44 catalina.2019-02-28.log
-rw-r--r--. 1 test  root    4136 3月   2 09:38 catalina.2019-03-02.log
-rw-r--r--. 1 test root   65729 3月   5 09:46 catalina.out
-rw-r--r--. 1 test root       0 2月  26 15:11 host-manager.2019-02-26.log
-rw-r--r--. 1 test root     903 2月  26 15:12 localhost.2019-02-26.log
-rw-r--r--. 1 test root 3902958 2月  27 00:00 localhost_access_log.2019-02-26.txt
-rw-r--r--. 1 test root 8856907 2月  27 23:59 localhost_access_log.2019-02-27.txt
-rw-r--r--. 1 test root 6136397 3月   1 00:00 localhost_access_log.2019-02-28.txt
-rw-r--r--. 1 test root 3874887 3月   2 00:00 localhost_access_log.2019-03-01.txt
-rw-r--r--. 1 test root 3632150 3月   3 00:00 localhost_access_log.2019-03-02.txt
-rw-r--r--. 1 test root 3263432 3月   4 00:00 localhost_access_log.2019-03-03.txt
-rw-r--r--. 1 test root 3275050 3月   5 00:00 localhost_access_log.2019-03-04.txt
-rw-r--r--. 1 test root 1966372 3月   5 14:21 localhost_access_log.2019-03-05.txt
-rw-r--r--. 1 test root       0 2月  26 15:11 manager.2019-02-26.log

[root@myhost logs]# du -sm ./*
1       ./catalina.2019-02-26.log
1       ./catalina.2019-02-28.log
1       ./catalina.2019-03-02.log
1       ./catalina.out
0       ./host-manager.2019-02-26.log
1       ./localhost.2019-02-26.log
4       ./localhost_access_log.2019-02-26.txt
9       ./localhost_access_log.2019-02-27.txt
6       ./localhost_access_log.2019-02-28.txt
4       ./localhost_access_log.2019-03-01.txt
4       ./localhost_access_log.2019-03-02.txt
4       ./localhost_access_log.2019-03-03.txt
4       ./localhost_access_log.2019-03-04.txt
2       ./localhost_access_log.2019-03-05.txt
0       ./manager.2019-02-26.log
[root@myhost logs]# du -sh ./*
40K     ./catalina.2019-02-26.log
4.0K    ./catalina.2019-02-28.log
8.0K    ./catalina.2019-03-02.log
72K     ./catalina.out
0       ./host-manager.2019-02-26.log
4.0K    ./localhost.2019-02-26.log
3.8M    ./localhost_access_log.2019-02-26.txt
8.5M    ./localhost_access_log.2019-02-27.txt
5.9M    ./localhost_access_log.2019-02-28.txt
3.7M    ./localhost_access_log.2019-03-01.txt
3.5M    ./localhost_access_log.2019-03-02.txt
3.2M    ./localhost_access_log.2019-03-03.txt
3.2M    ./localhost_access_log.2019-03-04.txt
2.0M    ./localhost_access_log.2019-03-05.txt
0       ./manager.2019-02-26.log

[root@myhost logs]# du -sh
34M     .
[root@myhost logs]# du -sm
34      .
腳本實現
[root@myhost logs]# /home/script/logpath_monitor.sh
#!/bin/bash
source /etc/profile

#define variables

#指定日誌所在路徑
log_path="/home/apache-tomcat-7.0.78/logs"

#獲取指定路徑所有日誌文件的總大小,單位M
size_all=`du -s -m $log_path | awk '{print $1}'`

#設置一個基準時間(此時此刻),從1970年1月1日00:00:00到目前經歷的秒數
base_time=`date +"%s"`

#當指定路徑下日誌的總容量大於30M(我這裏設置得比較小的原因是方便測試)時,刪除最早創建的日誌文件
if [ "$size_all" -gt "30" ];then
	for i in `ls $log_path`;
	do
		date_suffix=`echo $i | cut -d '.' -f 2`
		#判斷截取出來的後綴字符串是否是out(因爲catalina.out日誌的存在)
		if [ "$date_suffix" == "out" ];then
			echo "i am catalina.out"
			#這種情況的時候,需要跳出當前循環繼續下一個循環
			continue;
		fi
		echo $date_suffix
		date_i=`date -d "$date_suffix" +"%s"`
		
		echo  "date_i="$date_i
		#再通過循環獲取最早日期的日誌文件
		#if [ "$date_i" -lt "$base_time" ];then
		if [ `echo $date_i | awk -v bi=$base_time '{print($1<bi)?"0":"1"}'` -eq "0" ];then
			base_time=$date_i			
		fi
	done
		earliest_date=`date -d @"$base_time" +"%F"`
		echo "----------------------------分割線----------------------------------------"
		echo "earliest_date="$earliest_date
		
	#上面執行成功即循環結束之後,我們最後base_time變量的值一定是最早日期
	#然後我們便可以刪除掉我們獲取到的最早日期的日誌文件
	if [ "$?" -eq "0" ];then
		#先scp命令備份到專門存儲日誌的服務器上面,再進行刪除(略)
		/bin/rm -rf $log_path/*.$earliest_date.log
		/bin/rm -rf $log_path/*.$earliest_date.txt
		echo "ok"
	fi
	
fi

定時任務

最後,將該腳本添加進定時任務:每天執行一次,每天晚上2點執行該腳本

00 2 * * *  root  /home/script/logpath_monitor.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章