多種分割WebServer日誌的方法(轉)

ba發表於2007-08-15
多種分割WebServer日誌的方法(轉)[@more@]本文完整文件的地址為: http://dev.weamax.com/docs/books/log_process/log_process.html

本文作者: Kenny Zhao

為什麼要分割日誌
隨著網站的訪問越來越大,WebServer產生的日誌檔案也會越來越大,如果不對日誌進行分割,那麼只能一次將大的日誌(如Apache的日誌)整個刪除,這樣也丟失了很多對網站比較寶貴的資訊,因為這些日誌可以用來進行訪問分析、網路安全監察、網路執行狀況監控等,因此管理好這些海量的日誌對網站的意義是很大的。

本文將總結一些實用的日誌分割方法,希望能夠方便Linux/Unix管理員對日誌檔案進行有效的管理,如果檔案過多過大,可以刪除一些歷史的檔案。



幾種日誌分割方法
2.1.1. 用第三方程式cronolog進行日誌分割
2.1.2. 用自寫的指令碼進行日誌分割
2.1.3. 用第三方程式newsyslog進行日誌分割

2.1.1. 用第三方程式cronolog進行日誌分割
這種方法最便捷快速,缺點是隻支援Apache。


例 2.1. 用cronolog分割日誌

1. 下載cronolog

官方下載地址:

tar xzvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
2. 編譯


./configure
make
make install
3. 修改Apache的配置檔案httpd.conf,加入以下程式碼


CustomLog "|/usr/local/sbin/cronolog /var/log/httpd/www/access%Y%m%d.log" combined
注意
如果Apache中有多個虛擬主機,最好每個虛擬主機中放置一個這樣的程式碼,並將日誌檔名改成不同的名字



提示
/var/log/httpd/www/ 可以更改為任何日誌輸出路徑


4. 儲存配置後重新啟動Apache服務


/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/httpd start
最後生成的檔名如以下格式:

/var/log/httpd/www/access20050918.log


2.1.2. 用自寫的指令碼進行日誌分割
如果因為條件不允許,不能使用cronolog分割,這裡提供一種更加簡潔的方法,可適合以下系統

Linux
Unix
*BSD

例 2.2. 計劃任務的方式每天生成一個檔案並壓縮存放

注意
假設:/var/log/httpd/ 為日誌存放的路徑,access_log 為以前的日誌檔名

1. 建立新檔案: /var/log/httpd/log-task.cron

檔案內容如下


#!/bin/bash

YESTERDAY=`date -d yesterday +%Y%m%d`
/usr/bin/gzip -c /var/log/httpd/access_log>/var/log/httpd/access${YESTERDAY}.log.gz
>/var/log/httpd/access_log
儲存退出


2. 修改檔案的執行許可權並測試指令碼

CODE:
[Copy to clipboard]
chmod u+x /var/log/httpd/log-task.cron
立即執行一次,測試指令碼是否正常工作


注意
測試之前建議先備份一下日誌檔案(/var/log/httpd/access_log)


測試:

/var/log/httpd/log-task.cron
檢查/var/log/httpd 目錄下是否已經生成了日期命名的檔案。

3. 將該指令碼加入到自動執行任務中

crontab -e

然後將以下的的程式碼複製加入到cron的啟動指令碼末尾:

1 0 * * * /var/log/httpd/log-task.cron
儲存退出。

提示
(每天凌晨0點1分系統將自動進行日誌回滾任務,最終會在/var/log/httpd目錄下每天生成一個壓縮的日誌檔案,檔名如 access20051216.log.gz)


2.1.3. 用第三方程式newsyslog進行日誌分割
這種方法適用於SQUID等無法使用cronolog的WebServer,缺點是安裝比較複雜。

例 2.3. 用newsyslog分割日誌

注意
假設:/usr/local/squid/var/logs/ 為日誌存放的路徑,access.log 為以前的日誌檔名

1. 下載newsyslog

官方下載地址:


tar xzvf newsyslog-1.8.tar.gz
cd newsyslog-1.8
2. 編譯

./configure
make
make install
3. 建立一個新的檔案 /usr/local/etc/newsyslog.conf

set squid_logpath = /usr/local/squid/var/logs
set squid_log = /usr/local/squid/var/logs/access.log
set date_squid_log = /usr/local/squid/var/logs/access%Y%M%D.log

SQUID{
restart: run /usr/local/squid/sbin/squid -k rotate
log: SQUID squid_log squid squid 644
archive: SQUID date_squid_log 0

}
儲存退出


提示
/usr/local/squid/var/logs 可以更改為任何日誌輸出路徑


4. 將該指令碼加入到自動執行任務中

crontab -e

然後將以下的的程式碼複製加入到cron的啟動指令碼末尾:

CODE:
[Copy to clipboard]
58 23 * * * /usr/local/sbin/newsyslog
最後生成的檔名如以下格式:

/usr/local/squid/var/logs/access20050918.log

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958520/,如需轉載,請註明出處,否則將追究法律責任。

相關文章