監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉
上海OA快博

當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 上海OA系統(tǒng) > 上海OA快博

統(tǒng)計分析Web服務(wù)器日志

申請免費試用、咨詢電話:400-8352-114

AMTeam.org

統(tǒng)計分析Web服務(wù)器日志

李翔 王莉    

隨著Internet上Web服務(wù)的發(fā)展,幾乎各個政府部門、公司、大專院校、科研院所等都在打算構(gòu)建或正在建設(shè)自己的網(wǎng)站。在這個過程中,大家會遇到各種各樣的問題。對Web服務(wù)器的運行和訪問情況進行詳細(xì)和周全地分析,可以及時了解網(wǎng)站運行情況,發(fā)現(xiàn)網(wǎng)站存在的不足,促進網(wǎng)站更好地發(fā)展,它的重要性是不言而喻的。

管理Web網(wǎng)站不只是監(jiān)視Web的速度和Web的內(nèi)容傳送。它不僅要關(guān)注服務(wù)器每天的吞吐量,還要了解這些Web網(wǎng)站的外來訪問,了解網(wǎng)站各頁面的訪問情況。根據(jù)各頁面的點擊頻率來改善網(wǎng)頁的內(nèi)容和質(zhì)量,提高內(nèi)容的可讀性,以及跟蹤包含有商業(yè)交易的步驟及管理Web網(wǎng)站“幕后”的數(shù)據(jù)等。

為了更好地提供WWW服務(wù),監(jiān)控Web服務(wù)器的運行情況、了解網(wǎng)站內(nèi)容的詳細(xì)訪問狀況就顯得越來越重要和迫切了。而這些要求都可以通過對Web服務(wù)器日志文件的統(tǒng)計和分析來實現(xiàn)。本文將對Web服務(wù)器日志分析的原理和技術(shù)進行討論。

文章內(nèi)相關(guān)工具軟件下載地址如下:

Webalizer http://www.mrunix.net/webalizer/
Cronolog http://www.cronolog.org/
Apache http://www.apache.org/
 
Web日志分析的原理

網(wǎng)站服務(wù)器日志記錄了Web服務(wù)器接收處理請求及運行時錯誤等各種原始信息。通過對日志進行統(tǒng)計、分析和綜合,就能有效地掌握服務(wù)器的運行狀況、發(fā)現(xiàn)和排除錯誤原因、了解客戶訪問分布等,更好地加強系統(tǒng)的維護和管理。

WWW服務(wù)模型非常簡單(見圖1):

圖1 Web訪問機制

1.客戶端(瀏覽器)和Web服務(wù)器建立TCP連接,連接建立以后,向Web服務(wù)器發(fā)出訪問請求(如get)。根據(jù)HTTP協(xié)議,該請求中包含了客戶端的IP地址、瀏覽器的類型、請求的URL等一系列信息。

2. Web服務(wù)器收到請求后,將客戶端要求的頁面內(nèi)容返回到客戶端。如果出現(xiàn)錯誤,那么返回錯誤代碼。

3. 服務(wù)器端將訪問信息和錯誤信息記錄到日志文件里。

下面是客戶端發(fā)送給Web服務(wù)器請求的數(shù)據(jù)報的內(nèi)容:

GET /engineer/ideal/list.htm HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer:
http://www.linuxaid.com.cn/engineer/ideal/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host:
www.linuxaid.com.cn
Connection: Keep-Alive
 

從代碼中可以看到,在客戶機的請求里包含了很多有用的信息,如客戶端類型等。Web服務(wù)器會將請求的Web頁內(nèi)容發(fā)送返回給客戶機。

目前常用的Web服務(wù)器有Apache、Netscape Enterprise Server、MS IIS等。而現(xiàn)在互聯(lián)網(wǎng)上常用的Web服務(wù)器就是Apache,因此本文所做的討論都將以Linux+Apache環(huán)境討論(其它的應(yīng)用環(huán)境與此類似)。對于Apache來說,支持多種日志文件格式,最常見的是common和combined兩種模式。其中,combined方式比common方式日志信息中的Referer(表示該請求來自于哪里,例如來自于yahoo的搜索引擎)和User-agent(用戶客戶端類型,如Mozilla或IE)多。下面是common類型的日志示例:

218.242.102.121 - - [06/Dec/2002:00:00:00 +0000] "GET
/2/face/shnew/ad/via20020915logo.gif HTTP/1.1" 304 0 "
http://www.mpsoft.net/"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
61.139.226.47 - - [06/Dec/2002:00:00:00 +0000] "GET /cgi-bin/guanggaotmp.cgi?1
HTTP/1.1" 200 178 "
http://www3.beareyes.com.cn/1/index.php" "Mozilla/4.0
(compatible; MSIE 5.0; Windows 98; DigExt)"
218.75.41.11 - - [06/Dec/2002:00:00:00 +0000] "GET
/2/face/shnew/ad/via20020915logo.gif HTTP/1.1" 304 0 "
http://www.mpsoft.net/"
"Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)"
61.187.207.104 - - [06/Dec/2002:00:00:00 +0000] "GET /images/logolun1.gif
HTTP/1.1" 304 0 "
http://www2.beareyes.com.cn/bbs/b.htm" "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1)"
211.150.229.228 - - [06/Dec/2002:00:00:00 +0000] "GET /2/face/pub/image_top_l.gif
HTTP/1.1" 200 260 "
http://www.beareyes.com/2/lib/200201/12/20020112004.htm"
"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"
 

從上面的日志文件可以看出,日志記錄會記錄客戶端的IP地址、訪問發(fā)生的時間、訪問請求的頁面、Web服務(wù)器對于該請求返回的狀態(tài)信息、返回給客戶端的內(nèi)容的大?。ㄒ宰止?jié)為單位)、該請求的引用地址、客戶瀏覽器類型等信息。

Apache日志的配置和管理

本文中假設(shè)Apache運行有兩個虛擬主機:www.secfocus.comwww.tomorrowtel.com。我們需要對這兩個虛擬主機分別進行訪問日志分析和統(tǒng)計。

Apache配置文件中,需要關(guān)心的和日志相關(guān)配置有兩個:

$ CustomLog /www/logs/access_log common
$ ErrorLog /www/logs/error_log
 

CustomLog用來指示Apache的訪問日志存放的位置(這里保存在/www/logs/access_log中)和格式(這里為common);ErrorLog用來指示Apache錯誤信息日志存放的位置。

對于不配置虛擬主機的服務(wù)器來說,只需直接在httpd.conf中查找CustomLog配置進行修改即可。而對于具有多個虛擬服務(wù)器的Web服務(wù)器來說,需分離各個虛擬服務(wù)器的訪問日志,以便對各個虛擬服務(wù)器進行訪問統(tǒng)計和分析。因此就需要在虛擬服務(wù)器配置中進行獨立的日志配置,示例如下:

NameVirtualHost 75.8.18.19
<VirtualHost 75.8.18.19>
ServerName
www.secfocus.com
ServerAdmin secfocus@secfocus.com
DocumentRoot /www/htdocs/secfocus/
CustomLog "/www/log/secfocus" combined
Alias /usage/ "/www/log/secfocus/usage/"
</VirtualHost>
<VirtualHost 75.8.18.19>
ServerName
www.tomorrowtel.com
ServerAdmin tomorrowtel @ tomorrowtel.com
DocumentRoot /www/htdocs/ tomorrowtel
CustomLog "/www/log/tomorrowtel " combined
Alias /usage/ "/www/log/tomorrowtel/usage/"
</VirtualHost>
 

這里需要注意的是,每個虛擬主機的定義都有一個CustomLog命令,用來指定該虛擬主機訪問日志的存放文件;而Alias命令用來讓日志分析生成的報表能通過
www.secfocus.com/usage/的方式來訪問。通過上面的配置就完成了日志文件的保存。

接下來遇到的一個問題就是日志文件的輪循。因為日志一直在增大,如果不進行處理那么日志文件越來越大,就會影響Web服務(wù)器運行效率、速率,還可能耗盡服務(wù)器硬盤空間,導(dǎo)致服務(wù)器無法正常運行。另外,如果單個日志文件大于操作系統(tǒng)單文件尺寸的的限制,從而會進一步影響Web服務(wù)的運行。而且,日志文件如果不進行輪循,也不便于日志統(tǒng)計分析程序的運行。因為日志統(tǒng)計分析都是以天為單位進行統(tǒng)計分析的,跨越很長時間日志會使得統(tǒng)計分析程序運行特別慢。因此這里就需要對Web服務(wù)器日志文件每天進行輪循。

Web服務(wù)器日志輪循

Web服務(wù)器日志輪循比較好的方式有三種:第一種方法是利用Linux系統(tǒng)自身的日志文件輪循機制logrotate;第二種方法是利用Apache自帶的日志輪循程序rotatelogs;第三種是使用在Apache的FAQ中推薦發(fā)展已經(jīng)比較成熟的一個日志輪循工具cronolog。

對于大型的Web服務(wù)來說,往往使用實用負(fù)載均衡技術(shù)提高Web站點服務(wù)能力,這樣后臺有多個服務(wù)器提供Web服務(wù),大大方便了服務(wù)的分布規(guī)劃和擴展性。如果有多個服務(wù)器的分布需要對日志進行合并,統(tǒng)一進行統(tǒng)計分析。因此為了保證統(tǒng)計的精確性,需要嚴(yán)格按照每天的時段來自動生成日志。

用logrotate實現(xiàn)日志輪循

首先討論采用Linux系統(tǒng)自身的日志文件輪循機制logrotate的方法。logrotate是Linux系統(tǒng)自身帶的一個日志輪循程序,是專門對各種系統(tǒng)日志(syslogd、mail)進行輪循的程序。該程序是由運行程序的服務(wù)crond每天凌晨4:02運行的。在/etc/cron.daily目錄下可以看到logrotate文件,其內(nèi)容如下:

#!/bin/sh/
$ usr/sbin/logrotate /etc/logrotate.conf
 

每天清晨crond都會啟動/etc/cron.daily目錄下的logrotate腳本來進行日志輪循。

在/etc/logrorate.conf中可以看到如下內(nèi)容:

# 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目錄下。因此只需要在該目錄下創(chuàng)建一個名為apache的配置文件,來指示logrotate如何輪循Web服務(wù)器的日志文件即可。下面是一個示例:

/www/log/secfocus {
    rotate 2
    daily
    missingok
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd 2> /dev/null || true
    endscript
}
/www/log/tomorrowtel {
    rotate 2
    daily
    missingok
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd 2> /dev/null || true
    endscript
}
 

這里“rotate 2”表示輪循時只包括兩個備份文件,也就是只有access_log、access_log.1和access_log.2三個日志備份文件。這樣就實現(xiàn)了對兩個虛擬主機的日志文件的輪循。本文后面會討論如何使用日志統(tǒng)計分析軟件對日志文件進行處理。

這種方法的優(yōu)點是不需要其它第三方工具就可以實現(xiàn)日志輪循。但是對于重負(fù)載的服務(wù)器和使用負(fù)載均衡技術(shù)的Web服務(wù)器來說,這種方法不是很實用。因為它是對相應(yīng)服務(wù)進程發(fā)出一個-HUP重啟命令來實現(xiàn)日志的截斷歸檔的,這樣會影響服務(wù)的連續(xù)性。

用rotatelogs實現(xiàn)日志輪循

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

# 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
 
 
上面的示例中,Apache訪問日志被發(fā)送給程序rotatelogs;rotatelogs將日志寫入/www/logs/secfocus/access_log,并每隔86400秒(1天)對日志進行一次輪循。輪循以后的文件名為/www/logs/secfocus/access_log.nnn,這里nnn是開始記錄日志的時間。因此,為了將日志按天對齊需要在凌晨00:00啟動服務(wù),使得每天輪循得到的日志剛好是完整一天的日志,以提供給訪問統(tǒng)計分析程序進行處理。如果是00:00開始生成新的日志,那么輪循得到的日志就是access_log.0000。

用cronolog實現(xiàn)日志輪循

首先需要下載和安裝cronolog,可以到http://www.cronolog.org下載最新版本的cronolog。下載完畢以后,解壓安裝即可。方法如下所示:

tar xvfz cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
make
make check
make install
 

這樣就完成了cronolog的配置和安裝,默認(rèn)情況下cronolog是安裝在/usr/local/sbin下。

修改Apache日志配置命令如下所示:

$ CustomLog "|/usr/local/sbin/cronolog /www/logs/secfocus/%w/access_log" combined
 

這里%w表示按照日期在不同的目錄下保存日志,這種方式會保存一周的日志。

為了進行日志分析,需要每天將該日志文件拷貝(或移動,如果不希望保存一周的日志)到一個固定的位置,以方便日志分析統(tǒng)計文件進行處理(使用crontab -e)。添加定時任務(wù)如下:

$ 5 0 * * * /bin/mv /www/logs/secfocus/`date -v-1d +%w`/access_log
/www/logs/secfocus/access_log_yesterday
 

再使用日志統(tǒng)計分析程序,對文件access_log_yesterday進行處理。

對于使用負(fù)載均衡技術(shù)的大型站點,就存在多個服務(wù)器的訪問日志的合并處理問題。對于這種情況,各個服務(wù)器定義或移動日志文件時就不能使用access_log_yesterday了,而應(yīng)該帶上服務(wù)器編號(例如服務(wù)器IP地址等信息)加以區(qū)分。然后在各個服務(wù)器上運行網(wǎng)站鏡像和備份服務(wù)rsyncd,再將每個服務(wù)器每天的安裝配置文件通過rsync下載到專門進行訪問統(tǒng)計分析的服務(wù)器上進行合并。

合并多個服務(wù)器的日志文件(如log1、log2、log3),并輸出到log_all中的方法是:

$ sort -m -t " " -k 4 -o log_all log1 log2 log3
 

-m表示使用merge優(yōu)化算法;-k 4表示根據(jù)時間進行排序;-o表示將排序結(jié)果存放到指定的文件中。

日志統(tǒng)計分析程序webalizer的安裝和配置

webalizer是一個高效、免費的Web服務(wù)器日志分析程序。其分析結(jié)果是HTML文件格式的,從而可以很方便地通過Web服務(wù)器進行瀏覽。Internet上的很多站點都使用webalizer進行Web服務(wù)器日志分析。Webalizer具有以下一些特性。

◆ 它是用C語言寫的程序,具有很高的運行效率。在CPU主頻為200MHz的機器上,webalizer每秒鐘可以分析1萬條記錄,所以分析一個40MB大小的日志文件只需要15秒。

◆ webalizer支持標(biāo)準(zhǔn)的一般日志文件格式(Common Logfile Format)。除此之外,也支持幾種組合日志格式的變種,從而可以統(tǒng)計客戶情況及客戶操作系統(tǒng)類型。現(xiàn)在webalizer已經(jīng)可以支持wu-ftpd xferlog日志格式及squid日志文件格式。

◆ 支持命令行配置及配置文件。

◆ 可以支持多種語言,也可以自己進行本地化工作。

◆ 支持多種平臺,比如Unix、Linux、NT、OS/2和MacOS等。

如圖2所示,這是webalizer生成的訪問統(tǒng)計分析報表第一頁的內(nèi)容。里面包含每個月的平均訪問量的表格和條形圖統(tǒng)計分析情況。點擊每個月份,可以得到這個月每天的詳細(xì)統(tǒng)計信息。

圖2 webalizer生成的訪問統(tǒng)計分析報表第一頁的內(nèi)容


1.安裝

在安裝以前,首先需要確保系統(tǒng)已經(jīng)安裝有g(shù)d庫,可以使用下段代碼:

# rpm -qa|grep gd
# gd-devel-1.8.4-4
# gdbm-devel-1.8.0-14
# gdbm-1.8.0-14
# sysklogd-1.4.1-8
# gd-1.8.4-4
 

用來確認(rèn)系統(tǒng)已經(jīng)安裝有g(shù)d-deve和gd兩個RPM包。

安裝webalizer有兩種方式:一種是下載源代碼來安裝;一種是直接使用RPM包來安裝。

使用RPM包方式安裝非常簡單,從rpmfind.net找到webalizer包,下載以后運行以下代碼,即可實現(xiàn)安裝:

$ rpm -ivh webalizer-2.01_10-1.i386.rpm
 

對于源代碼方式需要從
http://www.mrunix.net/webalizer/下載,然后安裝。首先解開源代碼包:

$ tar xvzf webalizer-2.01-10-src.tgz
 

在生成的目錄中有個lang目錄。該目錄中保存了各種語言文件,但是只有繁體中文版本,可以自己轉(zhuǎn)換成簡體,或者重新翻譯一下,然后進入生成的目錄:

$ cd  webalizer-2.01-10
$ ./configure
$ make --with-language=Chinese
$ make install
 

編譯成功后,會在/usr/local/bin/目錄下安裝一個webalizer可執(zhí)行文件。

2.配置和運行

對webalizer運行的控制可以通過配置文件或在命令行指定參數(shù)的兩種方式進行。使用配置文件方式比較簡單和靈活,適用于自動Web服務(wù)器日志統(tǒng)計分析的應(yīng)用環(huán)境。

webalizer的默認(rèn)配置文件為/etc/webalizer.conf,當(dāng)啟動webalizer時沒有使用“-f“選項時,webalizer就會尋找文件/etc/webalizer.conf,也可以使用“-f”來指定配置文件(當(dāng)服務(wù)器有虛擬主機時,需要配置多份不同的webalizer配置文件。不同的虛擬主機的webalizer使用不同的配置文件。webalizer.conf配置文件中需要修改的配置選項如下:

LogFile     /www/logs/secfocus/access_log
 

用來指示配置文件的路徑信息,webalizer會將該日志文件作為輸入進行統(tǒng)計分析:

OutputDir      /www/htdocs/secfocus/usage
 

用來指示生成的統(tǒng)計報表的保存目錄,在前面使用alias,使用戶可以使用
http://www.secfocus.com/usage/來訪問統(tǒng)計報表。

HostName      www.secfocus.com
 
上述代碼用來指示主機名,統(tǒng)計報表中會引用該主機名。

其它選項無需修改。配置文件修改完畢以后,需要定時webalizer,每天生成當(dāng)日的統(tǒng)計分析。

以root身份運行crontab -e進入定時運行任務(wù)編輯狀態(tài),加入如下任務(wù):

$ 5 0 * * * /usr/local/bin/webalizer -f /etc/secfocus.webalizer.conf
$ 15 0 * * * /usr/local/bin/webalizer -f /etc/tomorrowtel.webalizer.conf
 

這里假設(shè)系統(tǒng)運行有兩個虛擬主機,并分別定義了日志分析配置文件secfocus.webalizer.conf和tomorrowtel.webalizer.conf。這樣定義在凌晨00:05對secfocus的日志進行統(tǒng)計分析;在凌晨00:15對tomorrowtel的日志進行統(tǒng)計分析。

第二天分別使用http://www.secfocus.com/usagehttp://www.tomorrowtel.com/usage來查看各自的日志分析報表。

保護日志統(tǒng)計分析報告不被未授權(quán)用戶訪問

我們都不希望自己網(wǎng)站訪問統(tǒng)計信息隨意被別人瀏覽,因此需要將usage目錄保護起來,只允許合法的用戶訪問。這里可以采用Apache自帶的基本認(rèn)證機制。配置以后再連接這個地址需要用戶提供密碼才能訪問該頁面(如圖3所示):

圖3 設(shè)置認(rèn)證機制后的密碼提示界面


1.條件

在配置文件中對目錄“/”應(yīng)該設(shè)置為:

DocumentRoot  /www/htdocs/secfocus/
AccessFileName .htaccess
AllowOverride All
 

2.需求

需求是限制對http://www.secfocus.com/usage/的訪問,要求用戶認(rèn)證才能訪問。這里設(shè)置用戶為“admin”,口令為“12345678”。

使用htpasswd建立用戶文件:

$ htpasswd -c /www/.htpasswd admin
 

此程序會詢問用戶“admin”的口令,輸入“12345678”兩次生效。

3.建立.htaccess文件

用vi在/www/logs/secfocus/usage/目錄下建立一個文件.htaccess,寫入以下幾行代碼:

AuthName admin-only
AuthType Basic
AuthUserFile  /www/.htpasswd
require user admin
 
測試

通過瀏覽器訪問http://www.secfocus.com/usage,就會彈出框請求輸入用戶名和口令,輸入“admin”、“12345678”就可以訪問訪問日志統(tǒng)計分析報表。

發(fā)布:2007-03-25 10:38    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
上海OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢