2007年7月3日 星期二

[AWStats] Windows IIS 的 Log 分析

前言

由於工作上有 web log 分析的需求,又不想用 iTrend 2000 (感覺這套實在很遜....),於是在網路上找到這個號稱很強大又免費的工具「AWStats」,不僅可以分析 web log,連 FTP 以及 Mail 的 log 都可以分析,不過單就 Web log 而言,它可以針對 IIS、Apache、WebStar....等不同的 HTTP server 的 log 進行分析。


安裝前的準備

在安裝前,有以下兩樣工具必須先安裝起來:

1、Windows Scripting Host

2、Perl 執行環境:這個部分建議安裝 ActivePerl

當以上兩個部分都確定沒問題後,就可以上 AWStats 官方網站下載最新版的來安裝。(目前範例中安裝的是 Version 6.6)


第一次安裝 AWStats 時的設定

在第一次安裝 AWStats 後,會有一些設定必須進行:
# 這邊只是告訴你之後要進行一些基本的設定
----- AWStats awstats_configure 1.0 (build 1.6) (c) Laurent Destailleur -----
This tool will help you to configure AWStats to analyze statistics for
one web server. You can try to use it to let it do all that is possible
in AWStats setup, however following the step by step manual setup
documentation (docs/index.html) is often a better idea. Above all if:
- You are not an administrator user,
- You want to analyze downloaded log files without web server,
- You want to analyze mail or ftp log files instead of web log files,
- You need to analyze load balanced servers log files,
- You want to 'understand' all possible ways to use AWStats...
Read the AWStats documentation (docs/index.html).

# 工具偵測出目前的 OS 是 Windows
-----> Running OS detected: Windows

# Web server 的設定
-----> Check for web server install
# 以下要指定 Apache 的設定
awstats_configure did not find your Apache web main runtime.

Please, enter full directory path of your Apache web server or
'none' to skip this step if you don't have local web server or
don't have permission to change its setup.
Example: c:Program filesapache groupapache
Apache Web server path ('none' to skip):
> none # 由於是用在IIS上,因此Apache的設定就跳過

Your web server config file(s) could not be found.
You will need to setup your web server manually to declare AWStats
script as a CGI, if you want to build reports dynamically.
See AWStats setup documentation (file docs/index.html)

-----> Update model config file 'C:/Program Files/AWStatswwwrootcgi-binawstats.model.conf'
File awstats.model.conf updated.

# 第一次安裝要產生設定檔,直接按 y 過去了
-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ? y

# 設定 web site 的名稱(下面有範例,可以參考進行設定)
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.mysite.com
Example: demo
Your web site, virtual server or profile name:
> testSite

-----> Create config file 'C:/Program Files/AWStatswwwrootcgi-binawstats.testSite.conf'
Config file C:/Program Files/AWStatswwwrootcgi-binawstats.testSite.conf created.

-----> Add update process inside a scheduler
Sorry, for Windows users, if you want to have statistics to be
updated on a regular basis, you have to add the update process
in a scheduler task manually (See AWStats docs/index.html).
Press ENTER to continue...


A SIMPLE config file has been created: C:/Program Files/AWStatswwwrootcgi-bin
awstats.testSite.conf
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for 'testSite' with command:
> perl awstats.pl -update -config=testSite
You can also build static report pages for 'testSite' with command:
> perl awstats.pl -output=pagetype -config=testSite

Press ENTER to finish...


IIS 設定

接著要進入 IIS 設定,到 site 上面按滑鼠右鍵,選擇「內容」,進行以下設定:
  1. 確定選項「啟用紀錄(E)」有勾選
  2. 使用中的日誌格式必須選擇「W3C Extended Log File Format

接著選擇「內容」進入 Log 的設定,點選 Tab「擴充內容」,只要勾選底下幾個選項即可:
  • 日期 (date)
  • 時間 (time)
  • 用戶端 IP 位址 (c-ip)
  • 使用者名稱 (cs-username)
  • 方法 (cs-method)
  • URI 粗縱線 (cs-uri-stem)
  • URI 查詢 (cs-uri-query)
  • 通訊協定狀態 (sc-status)
  • 送出的位元組 (sc-bytes)
  • 通訊協定版本 (cs-version)
  • 使用者代理程式 (cs(User-Agent))
  • 推薦者 (cs(Referer))

接著必須暫時停止 IIS,並把原本舊有的 log file 移到其他目錄存放後,再重新啟動 IIS,之後產生的 web log 大概格式會變成如下:
2007-07-03 06:29:00 140.137.4.232 - GET /test/Default.htm - 304 223 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+Avant+Browser;+Avant+Browser;+.NET+CLR+1.0.3705;+.NET+CLR+1.1.4322;+InfoPath.1;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30) -
2000-07-19 14:14:14 62.161.78.73 - GET / 200 1234 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.from.com/from.htm


AWStats 設定

首先必須將相關檔案複製到 Web Root 目錄中,假設都是在預設的情況下,必須將目錄「C:\Program Files\AWStats\wwwroot」底下的 cgi-binicon 兩個目錄複製到目錄「C:\Inetpub\wwwroot」中。

接著是設定檔的部分,設定檔必須存在於目錄「C:\Inetpub\wwwroot\cgi-bin」中,而其檔案名稱如下:
awstats.<your_site_name>.conf
若沒有此檔案,可複製範例設定檔(awstats.model.conf)後,修改檔名即可使用。

有了設定檔之後,接著就是修改裡面的設定來產生出我們要的 log 分析,以下是設定內容:(僅需修改以下說明的部分即可)
# "LogFile" contains the web, ftp or mail server log file to analyze.
# Possible values: A full path, or a relative path from awstats.pl directory.
# Example: "/var/log/apache/access.log"
# Example: "../logs/mycombinedlog.log"
# You can also use tags in this filename if you need a dynamic file name
# depending on date or time (Replacement is made by AWStats at the beginning
# of its execution). This is available tags :
# %YYYY-n is replaced with 4 digits year we were n hours ago
# %YY-n is replaced with 2 digits year we were n hours ago
# %MM-n is replaced with 2 digits month we were n hours ago
# %MO-n is replaced with 3 letters month we were n hours ago
# %DD-n is replaced with day we were n hours ago
# %HH-n is replaced with hour we were n hours ago
# %NS-n is replaced with number of seconds at 00:00 since 1970
# %WM-n is replaced with the week number in month (1-5)
# %Wm-n is replaced with the week number in month (0-4)
# %WY-n is replaced with the week number in year (01-52)
# %Wy-n is replaced with the week number in year (00-51)
# %DW-n is replaced with the day number in week (1-7, 1=sunday)
# use n=24 if you need (1-7, 1=monday)
# %Dw-n is replaced with the day number in week (0-6, 0=sunday)
# use n=24 if you need (0-6, 0=monday)
# Use 0 for n if you need current year, month, day, hour...
# Example: "/var/log/access_log.%YYYY-0%MM-0%DD-0.log"
# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log"
# You can also use a pipe if log file come from a pipe :
# Example: "gzip -d </var/log/apache/access.log.gz |"
# If there are several log files from load balancing servers :
# Example: "/pathtotools/logresolvemerge.pl *.log |"
# 指定 Log File 的位址,可按照上面詳細的說明
# 在此範例中,檔名為 ex070703.log
LogFile="D:/webLog/W3SVC1/ex%YY-0%MM-0%DD-0.log"

# W:表示處理的是 Web Log
LogType=W

# IIS 就直接設定為 2
LogFormat=2

# Site 名稱
SiteDomain="testSite"

# 除了 siteDomain,若有其他別名,就設定在這邊
HostAliases="testsite db3.pccu.edu.tw 127.0.0.1 localhost"

# DNS 查詢設定
DNSLookup=2

# 使用 Perl 跑出來的統計資料所存放的位置
# 若使用預設值「.」,則表示存放在與 awstats.pl 檔案相同的目錄中
DirData="C:/Inetpub/wwwroot/awstats_data"

# 主程式所存放的目錄
DirCgi="/cgi-bin"

# 產生網頁所需圖檔所存放的目錄
DirIcons="/icon"

# 是否允許由網頁直接更新結果
# 預設為0,表示必須進入 console 使用下指令更新
# 因此為了看到即時更新的結果,這邊改為允許(1)
AllowToUpdateStatsFromBrowser=1

設定完之後,必須進入 console,進行第一次產生統計資料的動作,執行以下程式:
C:\Documents and Settings\Administrator>cd C:\Inetpub\wwwroot\cgi-bin

C:\Inetpub\wwwroot\cgi-bin>perl awstats.pl -config=testSite -update
Create/Update database for config "./awstats.testSite.conf" by AWStats version 6.6 (build 1.887)
From data in log file "D:webLogW3SVC1ex070703.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 663
Found 1 dropped records,
Found 4 corrupted records,
Found 0 old records,
Found 658 new qualified records.
# 以上可以看見 Log 檔已經 parse 完成
接著進入目錄 C:\Inetpub\wwwroot\awstats_data 中,就可以看見有統計資料產生出來了! 另外關於有 dopped、corrupted....等 record,可參考官方網站的說明。


產生 HTML 報表

最後就是產生 HTML 報表了! 有兩種方式可以達成,第一種是直接在 console 中下指令,另一個是直接開網頁產生。一般來說,為求方便快速,當然是選後者。

假設 IIS Web Root 為剛剛上面設定的目錄 C:\Inetpub\wwwroot,則進入以下網址即可:
# testSite 為設定檔中指定的 site domain
http://your.site.domain/cgi-bin/awstats.pl?config=testSite


外掛 Plugin

看完產生出來的 HTML 報表後,點了 Country 發現,竟然沒辦法判斷國家? 於是上網找了一下,原來要開啟 GeoIPfree 這個 plugin,因此到設定檔中將此 plugin 的註解拿掉。

不過拿掉之後,還是不能跑,因為 ActivePerl 中的 module 沒辦法正確的執行這個 plugin,因此必須到 CPAN 直接下載 Geo::IPfree module,將其解壓縮後,再把 module 裡面的 Geo 目錄放到 AWStats 的 plugin 目錄中。

如此一來,就可以順利產生 static file 囉! 再回頭看 HTML 報表,也發現 Country 的部分可以成功顯示了!


後記

官方網站的說明中,指示使用者將檔案放到 Inetpub/wwwroot 下,後來實驗發現,自己設定一個虛擬目錄存放也是可以的!

所以還是設定虛擬目錄比較好管理些.....

後來還有看到透過 FTP 將 log 傳送過來分析,也就是分析 log 的主機跟 Web server 不需要是同一台;此外,似乎還有一堆好用的 plugin 可以用,不過這個部分就等之後有空再來測試囉!

【註】雖然可以自行設定虛擬目錄存放程式,不過 icon 目錄還是必須要放在 webroot 下....(大概是程式設計的問題吧!)

2 則留言:

  1. 請問, 如果是舊的 IIS log, 又沒按照它的 log format 寫時, 有什麼方法可以分析舊的 log 嗎? 謝謝.

    回覆刪除
  2. 這就必須要看看舊版的 IIS log format 了,稍微觀察一下 log 欄位的編排方式,並在 awstats 的設定檔中設定相對應的 log format 即可 (不過這樣有可能會 lose 某些資訊)

    回覆刪除