• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Web服務器日志統計分析完全解決方案

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    請注意 本文已刊載在《開放系統世界》2003年第二期,該文章版權屬于該雜志所有,請勿隨意轉載,轉載請保留該聲明 關鍵字: web服務器 日志 統計分析 crontab cronolog apache 摘要: 對于所有的ICP來說,除了保證網站穩定正常運行以外,一個重要的問題就是網

    請注意本文已刊載在《開放系統世界》2003年第二期,該文章版權屬于該雜志所有,請勿隨意轉載,轉載請保留該聲明

    關鍵字:web服務器 日志 統計分析 crontab cronolog apache

    摘要:對于所有的ICP來說,除了保證網站穩定正常運行以外,一個重要的問題就是網站訪問量的統計和分析報表,這對于了解和監控網站的運行狀態,對提高各個網站的服務能力和服務水平是必不可少的。通過對Web服務器的日志文件進行分析和統計,能夠有效掌握系統運行情況以及網站內容的受訪問情況、加強對整個網站及其內容的維護與管理。本文對Web服務器日志分析的原理和技術進行討論。

    文章相關軟件:

    webalizer http://www.mrunix.net/webalizer/
    cronolog http://www.cronolog.org/
    Apache http://www.apache.org/

    一、 前言

    隨著Internet上Web服務的發展,幾乎各個政府部門、公司、大專院校、科研院所等都在構建或正在建設自己的網站。而與此同時,在構建網站建設中各個單位都會遇到各種各樣的問題,那么對web服務器的運行和訪問情況進行詳細和周全的分析對于了解網站運行情況,發現網站存在的不足,促進網站的更好發展重要性是不言而喻的。

    管理Web網站不只是監視Web的速度和Web的內容傳送,它要求不僅僅關注服務器每天的吞吐量,還要了解對這些Web網站的外來訪問,了解網站各頁面的訪問情況,根據各頁面的點擊頻率來改善網頁的內容和質量、提高內容的可讀性,跟蹤包含有商業交易的步驟以及管理Web網站“幕后”的數據等。
    為了更好地提供WWW服務,監控WEB服務器的運行情況、了解網站內容的詳細訪問狀況就越來越顯得重要和迫切了。而這些要求都可以通過對web服務器的日志文件的統計和分析來做到。

    二、WEB日志分析的原理

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

    在WWW服務模型是非常簡單的(見圖1):

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


    圖1 web訪問機制

    2) web服務器收到請求后,將客戶端要求的頁面內容返回到客戶端。如果出現錯誤,那么返回錯誤代碼。

     

    3) 服務器端將訪問信息和錯誤信息紀錄到日志文件里。下面是客戶端發送給web服務器請求的數據報的內容:

    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服務器就會將請求的web頁內容發送返回給客戶機。

    目前最常用的web服務器有Apache、Netscape enterprise server、MS IIS等。而目前互聯網上最常用的web服務器就是apache,因此我們這里的討論都以Linux+apache環境討論,其他的應用環境類似。對于Apache來說,支持多種日志文件格式,最常見的是common和combined兩種模式,其中combined方式比common方式的日志的信息要多Referer(該請求來自于哪里,例如來自于yahoo的搜索引擎)和User-agent(用戶客戶端類型,如mozilla或IE)。我們這里討論combined類型。下面是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地址、訪問發生的時間、訪問請求的頁面、web服務器對于該請求返回的狀態信息、返回給客戶端的內容的大?。ㄒ宰止潪閱挝唬?、該請求的引用地址、客戶瀏覽器類型等信息。

    三、apache日志的配置和管理

    本文中我們假設我們的apache運行有兩個:www.secfocus.com和www.tomorrowtel.com。我們需要對這兩個分別進行訪問日志分析和統計。

    Apache配置文件中,我們需要關心的和日志相關的配置有兩個:

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

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

    對于不配置的服務器來說,只需要直接在httpd.conf中查找CustomLOg的配置進行修改即可;而對于具有多個虛擬服務器的web服務器來說,需要分離各個虛擬服務器的訪問日志,以便對各個虛擬服務器進行訪問統計和分析。因此這就需要在虛擬服務器配置中進行獨立的日志配置,示例:

    NameVirtualHost 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/"



    ServerName www.tomorrowtel.com
    ServerAdmin tomorrowtel @ tomorrowtel.com
    DocumentRoot /www/htdocs/ tomorrowtel
    CustomLog "/www/log/tomorrowtel " combined
    Alias /usage/ "/www/log/tomorrowtel/usage/"

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

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

    四、web服務器日志輪循

    web服務器日志輪循比較好的方式有三種:第一種方法是利用Linux系統自身的日志文件輪循機制:logrotate;第二種方法是利用apache自帶的日志輪循程序rotatelogs;第三種是使用在apache的FAQ中推薦發展已經比較成熟的一個日志輪循工具cronolog。

    對于大型的WEB服務來說,其往往使用實用負載均衡技術提高web站點服務能力,這樣后臺有多個服務器提供WEB服務,這大大方便了服務的分布規劃和擴展性,但多個服務器的分布就需要對日志進行合并統一進行統計分析。因此為了保證統計的精確性就需要嚴格按照每天的時段來自動生成日志文件。

    4.1 logrotate實現日志輪循

    首先我們討論采用Linux系統自身的日志文件輪循機制:logrotate的方法。Logrotate是Linux系統自身帶的一個日志輪循程序,是專門對各種系統日志(syslogd,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服務器的日志文件即可,下面是一個示例:

    /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三個日志備份文件。就這樣就實現了對兩個的日志文件的輪循。后面我們會討論如何使用日志統計分析軟件對日志文件進行處理。

    這種方法的優點是不需要其他第三方工具就可以實現日志輪循,但是對于重負載的服務器和使用負載均衡技術的web服務器來說這種方法就不是很實用。因為它是對相應服務進程發出一個-HUP重啟命令來實現日志的截斷歸檔的,這樣會影響服務的連續性。

    4.2 使用apache自帶的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

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

    4.3 使用cronolog實現日志輪循

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

    [root@mail root]# tar xvfz cronolog-1.6.2.tar.gz
    [root@mail root]# cd cronolog-1.6.2
    [root@mail cronolog-1.6.2]# ./configure
    [root@mail cronolog-1.6.2]# make
    [root@mail cronolog-1.6.2]# make check
    [root@mail cronolog-1.6.2]# make install

    這就完成了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(參考文章” 用rsync實現網站鏡像和備份”,ttp://www.linuxaid.com.cn/engineer/ideal/article/rsync.htm),然后將每個服務器每天的安裝配置文件通過rsync下載到專門進行訪問統計分析的服務器上進行合并。

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

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

    -m: 使用 merge優化算法,-k 4表示根據時間進行排序,-o表示將排序結果存放到指定的文件中。

    五、日志統計分析程序webalizer的安裝和配置

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

    1. 是用C寫的程序,所以其具有很高的運行效率。在主頻為200Mhz的機器上,webalizer每秒鐘可以分析10000條記錄,所以分析一個40M大小的日志文件只需要15秒。
    2. webalizer支持標準的一般日志文件格式(Common Logfile Format);除此之外,也支持幾種組合日志格式(Combined Logfile Format)的變種,從而可以統計客戶情況以及客戶操作系統類型。并且現在webalizer已經可以支持wu-ftpd xferlog日志格式以及squid日志文件格式了。
    3.  支持命令行配置以及配置文件。
    4. 可以支持多種語言,也可以自己進行本地化工作。
    5. 支持多種平臺,比如UNIX、linux、NT, OS/2 和 MacOS等。  

    上圖是webalizer生成的訪問統計分析報表第一頁的內容,這里包含每個月的平均訪問量的表格和條形圖統計分析情況。點擊每個月分,可以得到這個月每天的詳細統計信息。

    5.1 安裝

    在安裝以前首先需要確保系統已經安裝有gd庫,可以使用:

    [root@mail root]# 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

    來確認系統已經安裝有gd-deve和gd兩個rpm包。

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

    使用rpm包方式安裝非常簡單,從rpmfind.net找到webalizer包,下載以后:

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

    即可實現安裝。

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

    tar xvzf webalizer-2.01-10-src.tgz

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

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

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

    5.2 配置和運行

    對webalizer運行的控制可以通過配置文件或者在命令行指定參數的兩種方式進行。而使用配置文件方式是比較簡單和靈活的,適用于自動web服務器日志統計分析的應用環境。

    webalizer的默認配置文件為/etc/webalizer.conf,當啟動Webalizer時沒有使用“-f“選項時,Webalizer就會尋找文件/etc/webalizer.conf,也可以使用“-f”來指定配置文件(當服務器有時,就需要配置多份不同的webalizer配置文件,不同的的webalizer使用不同的配置文件。Webalizer.conf配置文件中需要修改的配置選項如下:

    LogFile /www/logs/secfocus/access_log

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

    OutputDir /www/htdocs/secfocus/usage

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

    HostName

    用來指示主機名,統計報表中會引用該主機名。

    其他選項就無需修改,配置文件修改完畢以后,就需要在定時webalizer,每天生成當日的統計分析。

    以root身份運行:crontab –e 進入定時運行任務編輯狀態,加入如下任務:

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

    我們這里假設系統運行有兩個,并分別定義了日志分析配置文件secfocus.webalizer.conf和tomorrowtel.webalizer.conf。這樣我們定義在凌晨00:05對secfocus的日志進行統計分析;在凌晨00:15對tomorrowtel的日志進行統計分析。

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

    六、保護日志統計分析報告不被未授權用戶訪問

    我們肯定不會希望自己網站訪問統計信息隨意被別人瀏覽,因此需要將usage目錄保護起來,只允許合法用戶訪問。這里可以采用apache自帶的基本的認證機制,配置以后再連接這個地址就會需要用戶提供密碼才能訪問該頁面:



    1、條件

    在配置文件中對目錄"/"應該設置為:

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

    2、需求

    需求:限制對http://www.secfocus.com/usage/的訪問,要求用戶認證才能訪問。這里設置用戶為"admin",口令為"12345678"。

    3、使用htpasswd建立用戶文件

    htpasswd -c /www/.htpasswd admin
    此程序會詢問用戶"admin"的口令,你輸入"12345678",兩次生效。

    4、建立.htaccess文件

    用vi在/www/logs/secfocus/usage/目錄下建立一個文件.htaccess,寫入以下幾行:
    AuthName admin-only
    AuthType Basic
    AuthUserFile /www/.htpasswd
    require user admin

    5、測試

    這時候通過瀏覽器訪問就會彈出框請求輸入用戶名和口令,這時候輸入admin、12345678就可以才可以訪問訪問日志統計分析報表

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>