【運維小分享】整理Apache日誌

網站的日誌文件隨着每天的訪問記錄積累,會越來越大,特別是大型網站。

日誌越來越大不僅影響儲存容量從而影響網站性能,而且對我們做日誌分析造成困難。

因此,我要對日誌進行規範整理。

 

方法一:使用rotatelogs實現log輪轉

rotatelogs是一個配合Apache管道日誌功能使用的簡單程序。

 

PS:管道日誌功能

Apache提供了不把日誌直接寫入文件,而是通過管道發送給另外一個程序的能力。這樣就大大加強了對日誌進行處理的能力。這個通過管道得到的程序可以是任意程序,如日誌分析、壓縮日誌等。要實現將日誌寫到管道的操作,只需要將配置中日誌文件部分的內容替換爲"|程序名"即可,例如:

# compressed logs
$ CustomLog
"|/usr/bin/gzip -c >> /var/log/access_log.gz" common

rotatelogs語法

rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]

logfile它加上基準名就是日誌文件名。如果logfile中包含"%",則它會被視爲用於strftime()的格式字符串;否則它會被自動加上以秒爲單位的".nnnnnnnnnn"後綴。這兩種格式都表示新的日誌開始使用的時間。rotationtime日誌文件滾動的以秒爲單位的間隔時間。offset相對於UTC的時差的分鐘數。如果省略,則假定爲"0"並使用UTC時間。比如,要指定UTC時差爲"-5小時"的地區的當地時間,則此參數應爲"-300"。filesizeM指定以filesizeM文件大小滾動,而不是按照時間或時差滾動。在 Windows 下的設置例子如下: 

# 限制錯誤日誌文件爲 1M 

ErrorLog "|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 1M" 

# 每天生成一個錯誤日誌文件 

#ErrorLog "|bin/rotatelogs.exe  logs/error-%Y-%m-%d.log 86400" 

# 限制訪問日誌文件爲 1M 

CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 1M" common 

# 每天生成一個訪問日誌文件 

#CustomLog "|bin/rotatelogs.exe  logs/access-%Y-%m-%d.log 86400" common

 

正題(實際運用操作):

修改/usr/local/apache2/conf/httpd.conf文件

ErrorLog "logs/error_log" #備註了它然後

改爲

ErrorLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/%Y-%m-%d-error_log 84600 480"

CustomLog "logs/access_log" common #備註了它然後

改爲

CustomLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/%Y-%m-%d-access_log 84600 480" combined

 

然後重啓Apache/usr/local/apache2/bin/apachectl -k restart

logs下就可看見改變了

-rw-r--r-- 1 root root   13400 Dec  8 15:50 2016-12-08-access_log

-rw-r--r-- 1 root root    3714 Dec  8 15:50 2016-12-08-error_log

可以把access_logerror_log刪除了,以後日誌都是按每天生成,對日誌做分析時就方便了。

 

然後你還可以通過crontab定期把三天前的舊日誌刪除。(幾天前自己在下面設置好)

 

crontab -e

00 00 * * * /usr/bin/find /usr/local/apache2/logs/ -name '*_log' -mtime +3 -exec rm -rf {} \;

 

方法二:寫shell腳本通過crontab定期進行備份刪除重啓日誌操作

 

vim cron_log.sh

 

#!/bin/bash
# This script run at 00:00
 
logs_path="/usr/local/apache2/logs/"
#How much days backup most
DAYS=3
 
#Core of script
cd $logs_path
DATE=`date +%Y-%m-%d-%H`
SRC_FILE="access.log"
TAR_FILE="access-$DATE.tar.gz"
tar -czf $TAR_FILE $SRC_FILE
rm -f $SRC_FILE

find ./ -name "access-*" -type f -mtime +$DAYS -exec rm {} \;
/usr/local/apache2/bin/apachectl -k restart
exit 0;

添加到crontab中定期執行

crontab -e

00 00 * * * /usr/local/crontab/cron_log.sh


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