當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 上海OA系統(tǒng) > 上海OA快博
統(tǒng)計分析Web服務(wù)器日志
統(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.com和www.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/usage和http://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)計分析報表。
- 1文獻綜述:戰(zhàn)略聯(lián)盟中知識資源的共享利用(by AMT 王玉榮)
- 2咨詢機構(gòu)的上海OA
- 3上海OA與實踐性社團(by AMT 仲英豪 編譯)
- 4定制化OA辦公軟件前途如何?
- 5實現(xiàn)Web應(yīng)用中的本地打印
- 6麥肯錫電子商務(wù)論叢-寬頻能夠挽救網(wǎng)絡(luò)媒體嗎
- 7上海OA管出企業(yè)"錢途"
- 8富士施樂:上海OA創(chuàng)造持續(xù)發(fā)展
- 9全文檢索技術(shù)的深層剖析
- 10存儲新焦點--信息生命周期管理(趙達(dá)文)
- 11頂級IT企業(yè)的世界大戰(zhàn):Web Services 驚世未了緣
- 12上海OA與企業(yè)信息化之路
- 13上海OA:未來企業(yè)核心競爭力
- 14網(wǎng)絡(luò)服務(wù)提供了建立 Microsoft .NET 的基本模塊
- 15上海OA的功能框架
- 16Java Web Services的遠(yuǎn)端調(diào)用
- 17保證.NET Web服務(wù)安全的必備知識
- 18為你的網(wǎng)絡(luò)服務(wù)制作文檔
- 19麥肯錫電子商務(wù)論叢-B2B意外回流
- 20用專家網(wǎng)絡(luò)進行隱性上海OA
- 21在.NET中建立Web service安全措施(第一部分)
- 22企業(yè)技術(shù)官員關(guān)注數(shù)據(jù)安全與交換問題
- 23WEB服務(wù)“不是”什么
- 24設(shè)立宗教場所申請流程及所需要提供材料
- 25如何識別上海OA“陷阱”
- 26泛普OA軟件2014年-2018年在大上海重點發(fā)展100家代理商
- 27Web服務(wù)與二進制傳輸
- 282014年下半年國內(nèi)OA辦公軟件市場誰將是“老大”?
- 29泛普OA辦公軟件ThinkOne提供制造業(yè)生產(chǎn)管理系統(tǒng)
- 30知識未被視為有價值的資產(chǎn)
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
版權(quán)所有:泛普軟件 渝ICP備14008431號-2 渝公網(wǎng)安備50011202501700號 咨詢電話:400-8352-114