管理Apache服务器访问日志
1.相關配置文件說明
一個優秀的Linux網絡管理員會密切關注服務器日志系統,這些日志可以提供異常訪問的線索。Apache可以記錄所有的訪問請求,同樣,錯誤的請求也會記錄。Apache配置文件中,需要關心的和日志相關的配置文件有兩個:
$ CustomLog /www/logs/access_log common? #記錄對Web站點的每個進入請求#
$ ErrorLog /www/logs/error_log? #記錄產生錯誤狀態的請求#
CustomLog用來指示Apache的訪問日志存放的位置(這里保存在/www/logs/access_log中)和格式(這里為common);ErrorLog用來指示Apache的錯誤信息日志存放的位置。對于不配置虛擬主機的服務器來說,只需直接在httpd.conf中查找CustomLog配置進行修改即可。而對于具有多個虛擬服務器的Web服務器來說,需分離各個虛擬服務器的訪問日志,以便對各個虛擬服務器進行訪問統計和分析,因此,需要在虛擬服務器配置中進行獨立的日志配置。
2.Web服務器日志輪循
Web服務器日志輪循比較好的方式有三種:第一種方法是利用Linux系統自身的日志文件輪循機制logrotate;第二種方法是利用Apache自帶的日志輪循程序rotatelogs;第三種是使用在Apache的FAQ中發展已經比較成熟的日志輪循工具cronolog。對于大型的Web服務器來說,往往使用負載均衡技術提高Web站點的服務能力,這樣后臺有多個服務器提供Web服務,大大方便了服務的分布規劃和擴展。如果有多個服務器,需要對日志進行合并,統一進行統計分析。因此為了保證統計的精確性,需要嚴格按照每天的時段來自動生成日志。
(1)用logrotate實現日志輪循
首先討論采用Linux系統自身的日志文件輪循機制logrotate的方法。logrotate是Linux系統自身帶的一個日志輪循程序,是專門對各種系統日志(syslog、mail)進行輪循的程序。該程序是由運行程序的服務crond每天凌晨4:02運行的。在/etc/cron.daily目錄下可以看到logrotate文件:
#!/bin/sh/
$ usr/sbin/logrotate /etc/logrotate.conf
每天凌晨crond都會啟動/etc/cron.daily目錄下的logrotate腳本來進行日志輪循。在/etc/logrorate. conf中可以看到如下內容:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
從logrotate的配置文件中可以看到,除了wtmp以外,需要滾動的日志的配置都保存在/etc/logroate.d目錄下。因此只需要在該目錄下創建一個名為apache的配置文件,來指示logrotate如何輪循Web服務器的日志文件即可。這種方法的優點是不需要其他第三方工具就可以實現日志輪循。但是對于重負載的服務器和使用負載均衡技術的Web服務器來說,這種方法不是很實用,因為它是對相應服務進程發出一個"-HUP"重啟命令來實現日志的截斷歸檔的,這樣會影響服務的連續性。
(2)用rotatelogs實現日志輪循
Apache提供了不把日志直接寫入文件,而是通過管道發送給另外一個程序的能力。這樣就大大加強了對日志進行處理的能力。這個通過管道得到的程序可以是任意程序,如日志分析、壓縮日志等。要實現將日志寫到管道的操作,只需要將配置中日志文件部分的內容替換為"|程序名"即可,例如:
# compressed logs
$ CustomLog "|/usr/bin/gzip -c >> /var/log/access_log.gz" common
這樣就可以使用Apache自帶的輪循工具rotatelogs來對日志文件進行輪循。rotatelogs基本是按時間或大小來控制日志的。
$ CustomLog "|/www/bin/rotatelogs /www/logs/secfocus/access_log 86400" common
例:
?CustomLog? "|/usr/sbin/rotatelogs /var/www/vhosts/591wed.com/statistics/logs/access_log_%Y_%m_%d 86400" plesklog
?ErrorLog? "|/usr/sbin/rotatelogs /var/www/vhosts/591wed.com/statistics/logs/error_log_%Y_%m_%d 86400"
?
上面內容表示,Apache訪問日志被發送給程序rotatelogs;rotatelogs將日志寫入/www/logs/ secfocus/access_log,并每隔86 400秒(1天)對日志進行一次輪循。輪循以后的文件名為/www/logs/ secfocus/access_log.nnn,這里nnn是開始記錄日志的時間。因此,為了將日志按天對齊需要在凌晨00:00啟動服務,使得每天輪循得到的日志剛好是完整一天的日志,以提供給訪問統計分析程序進行處理。如果是00:00開始生成新的日志,那么輪循得到的日志就是access_log.0000。
(3)用cronolog實現日志輪循
首先需要下載和安裝cronolog,可以到http://www.cronolog.org下載最新版本的cronolog。下載完畢以后,解壓安裝即可。這樣就完成了cronolog的配置和安裝,默認情況下,cronolog安裝在/usr/local/sbin下。修改Apache日志配置命令如下所示:
$ CustomLog "|/usr/local/sbin/cronolog /www/logs/secfocus/%w/access_log" combined
這里%w表示按照日期在不同的目錄下保存日志,這種方式會保存一周的日志。為了進行日志分析,需要每天將該日志文件復制(或移動,如果不希望保存一周的日志)到一個固定的位置,以方便日志分析統計文件進行處理(使用crontab -e)。添加定時任務如下:
$ 5 0 * * * /bin/mv /www/logs/secfocus/`date -v-1d +\%w`/access_log
/www/logs/secfocus/access_log_yesterday
再使用日志統計分析程序,對文件access_log_yesterday進行處理。對于這種情況,各個服務器定義或移動日志文件時就不能使用access_log_yesterday了,而應該帶上服務器編號(例如服務器IP地址等信息)加以區分。然后在各個服務器上運行網站鏡像和備份服務rsyncd,再將每個服務器每天的安裝配置文件通過rsyncd下載到專門進行訪問統計分析的服務器上進行合并。合并多個服務器的日志文件(如log1、log2、log3),并輸出到log_all中的方法是:
$ sort -m -t " " -k 4 -o log_all log1 log2 log3
-m表示使用merge優化算法;-k 4表示根據時間進行排序;-o表示將排序結果存放到指定的文件中。
posted on 2012-07-10 17:09 wnguh 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/591wed/archive/2012/07/10/2584978.html
總結
以上是生活随笔為你收集整理的管理Apache服务器访问日志的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: PHP excel文件导入至mysql中
 - 下一篇: iPhone 的 Push(推送通知)功