日志分析工具Awstats實戰之Apache篇:多站點日志分析
前面兩篇(日志分析工具Awstats實戰之Nginx篇:分析結果靜態化、日志分析工具Awstats實戰之Nginx篇:分析結果動態化)都在講述如何去部署nginx下的awstats日志分析工具,現在終于輪到apache。作為老牌的網頁服務器,awstats對apache的支持非常完美,所以整個配置過程也是十分簡單。因此,在這里我就拓展了一下部署,實現了對多站點的日志分析功能。
注意:自本篇博文發表之日,apache-2.4.x還是無法支持部署awstats日志分析結果訪問動態化,不過可以用前篇日志分析工具Awstats實戰之Nginx篇-分析結果靜態化中講到的方法來實施部署awstats。因此,本篇博文將用apache2.2.25版本來為大家講解如何部署awstats日志分析結果動態化及多站點。
環境:
- CentOS 6.4 x86_64
- ip:192.168.1.113
- 站點1:域名www.sunsky.com(server和client都通過hosts文件解析)
- 站點2:域名www.skysun.com(server和client都通過hosts文件解析)
- apache-2.2.25 編譯安裝,路徑/usr/local/apache,服務開啟狀態
- 日志記錄格式為apache默認的combined格式,切勿更改,否則會造成awstats無法分析日志。
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- apr-1.4.8 apr-util-1.5.2
- awstats-7.2.tar.gz
一、日志自動切割
由于apache自帶的日志輪詢工具rotatelogs,據專家說在進行日志切割時容易丟日志,所以這里我們就用cronolog來做日志切割。
1、下載并安裝cronolog
- cd /server/tools/
- wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
- tar zxf cronolog-1.6.2.tar.gz
- cd cronolog-1.6.2
- ./configure
- make&&make install
2、配置apache使用cronolog
由于實驗用的apache開啟了虛擬主機功能,所以以下配置都在虛擬主機中進行,這樣也是為了方便對多站點的分析操作。
- vim /usr/local/apache/httpd/extra/httpd-vhosts.conf
將配置文件中的CustomLog和ErrorLog替換為下面的(由于我們要對多站點,所以這里要替換兩個虛擬主機的,并且將日志存放名字做有效的區分才好)
- www.sunsky.com
- CustomLog "|/usr/local/sbin/cronolog /app/logs/sunsky_access_%Y%m%d.log" combined
- ErrorLog "|/usr/local/sbin/cronolog /app/logs/sunsky_error_%Y%m%d.log"
- www.skysun.com
- CustomLog "|/usr/local/sbin/cronolog /app/logs/skysun_access_%Y%m%d.log" combined
- ErrorLog "|/usr/local/sbin/cronolog /app/logs/skysun_error_%Y%m%d.log"
注意:這里一定要注意對兩個網站的日志名稱配置。
二、Awstats的安裝與配置
1、部署awstats
首先我們要下載awstats軟件包,并將其放在常規目錄(/usr/local)下
- wget http://awstats.sourceforge.net/files/awstats-7.2.tar.gz
- tar zxf awstats-7.2.tar.gz
- mv awstats-7.2 /usr/local/awstats
由于wget下載下來的包中權限是非root的,所以這里要修改權限,否則稍后*.pl將無法運行
- chown -R root.root /usr/local/awstats
- chmod +x /usr/local/awstats/tools/*.pl
- chmod +x /usr/local/awstats/wwwroot/cgi-bin/*.pl
接下來我們要執行awstats/tools下的awstats_configure.pl配置向導,用來生成awstats的配置文件,awstats配置文件的命名規則是awstats.website.conf
- cd /usr/local/awstats/tools/
- ./awstats_configure.pl
此時會出現如下提示:
- ----- AWStats awstats_configure 1.0 (build 1.9) (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).
- -----> Running OS detected: Linux, BSD or Unix
- -----> Check for web server install
- Enter full config file path of your Web server.
- Example: /etc/httpd/httpd.conf
- Example: /usr/local/apache2/conf/httpd.conf
- Example: c:\Program files\apache group\apache\conf\httpd.conf
- Config file path ('none' to skip web server setup):
- > /usr/local/apache/conf/httpd.conf #有可能是新版本的原因,這里會自動找到apache的配置文件,無需我們再自己填了,不過會問你一次,你回答y即可
- 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 '/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf'
- File awstats.model.conf updated.
- -----> 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 #詢問是否創建一個新的配置文件,這里填y
- -----> 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:
- > www.sunsky.com #這里讓填寫你的網站域名,虛擬主機名或者隨便一個配置名
- -----> Define config file path
- In which directory do you plan to store your config file(s) ?
- Default: /etc/awstats
- Directory path to store config file(s) (Enter for default):
- > #這里要填寫你配置文件存放路徑,我們使用它默認的路徑/etc/awstats,所以直接回車即可
- -----> Create config file '/etc/awstats/awstats.www.sunsky.com.conf'
- Config file /etc/awstats/awstats.www.sunsky.com.conf created.
- -----> Add update process inside a scheduler
- Sorry, configure.pl does not support automatic add to cron yet.
- You can do it manually by adding the following command to your cron:
- /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.sunsky.com
- Or if you have several config files and prefer having only one command:
- /usr/local/awstats/tools/awstats_updateall.pl now
- Press ENTER to continue... #提示不能自動加入crontab定時任務,需要稍后自己添加,我們按回車繼續即可
- A SIMPLE config file has been created: /etc/awstats/awstats.www.sunsky.com.conf
- You should have a look inside to check and change manually main parameters.
- You can then manually update your statistics for 'www.sunsky.com' with command:
- > perl awstats.pl -update -config=www.sunsky.com
- You can also build static report pages for 'www.sunsky.com' with command:
- > perl awstats.pl -output=pagetype -config=www.sunsky.com
- Press ENTER to finish... #提示配置文件創建完成和如何更新配置及建立靜態報告頁,這里我們回車即可結束這個配置向導
結束這個向導以后,我們對www.sunsky.com站點的awstats配置文件已經配置好了,下面配置www.skysun.com的配置文件,步驟和上面一樣,只是在域名的地方做更改即可。
2、修改awstats配置文件
完成配置文件的創建之后,我們還需要對/etc/awstats/awstats.www.sunsky.com.conf里的一些參數進行修改。
- sed -i 's#LogFile="/var/log/httpd/mylog.log"#LogFile="/app/logs/sunsky_access_%YYYY-24%MM-24%DD-24.log"#g' /etc/awstats/awstats.www.sunsky.com.conf
這里更改的目的是指定awstats需要分析的nginx的日志文件路徑。這里的路徑大家要按自己的日志路徑來填。
- sed -i 's#DirData="/var/lib/awstats"#DirData="/usr/local/awstats/data"#g' /etc/awstats/awstats.www.sunsky.com.conf
這里更改的目的是指定awstats的數據庫配置文件(即awstats的數據庫(純文本))。
以上的兩個替換操作進行完之后一定要用命令查看替換是否成功,以便及早發現紕漏。
- grep "LogFile=" /etc/awstats/awstats.www.sunsky.com.conf
- grep "DirData=" /etc/awstats/awstats.www.sunsky.com.conf
查詢替換結果正確之后,即可進行下面的步驟。
同樣,重復以上的2個sed步驟,來對www.skysun.com的awstats配置文件做操作,需要注意的是命令里面的日志路徑和對應的awstats的數據庫配置文件不要搞錯即可。
由于,此處沒有/usr/local/awstats/data目錄,所以我們要創建出來
- mkdir /usr/local/awstats/data
此時我們要對/usr/local/awstats目錄進行屬主變更,變更為apache的daemon用戶,不然一會訪問就會報錯。這里也是和nginx的一個明顯區別所在。
- chown -R daemon /usr/local/awstats
3、生成awstats統計信息數據庫
現在我們需要用awstats來生成對日志的統計分析信息出來了。由于我們用的是支持perl的FCGI動態化訪問頁面,所以此處我們只需要直接更新數據庫即可。FCGI程序會自動將數據庫以動態頁面的形式展現出來,無須再手動生成靜態頁面了。本處我們用腳本來完成。
- vim /server/scripts/awstats_up.sh
- #!/bin/sh
- /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.sunsky.com >/dev/null 2>&1
- /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.skysun.com >/dev/null 2>&1
該腳本里面用下面的命令也是可以的。
- /usr/local/awstats/tools/awstats_updateall.pl now
運行該腳本生成分析結果:
- /bin/sh /server/scripts/awstats_up.sh
提示:由于我們這里用的apache使用cronolog日志輪詢工具使得文件出來都是帶時間格式的。因此你可能會想,為什么不改成對當天的日志進行操作。首先在這里我們可以實時的進行日志分析數據庫更新來查看實時的日志,不過這里不建議大家這樣去做。
#p#
三、配置日志分析頁面的來訪ip的地址位置顯示
這里我們用國內最準確的ip數據庫——QQ純真庫(點擊下載),大家下載之后通過CRT用lrzsz工具傳上去,具體步驟這里不寫了。
附件里面有三個文件qqhostinfo.pm,qqwry.pl和QQWry.Dat,我們將這三個文件統統都放到/usr/local/awstats/wwwroot/cgi-bin/plugins中。
接下來,我們修改qqwry.pl文件,將./QQWry.Dat修改為${DIR}/plugins/QQWry
- vim /usr/local/awstats/wwwroot/cgi-bin/plugins/qqwry.pl
- #my $ipfile="./QQWry.Dat";
修改為:
- my $ipfile="${DIR}/plugins/QQWry.Dat";
然后編輯awstats的配置文件/etc/awstats/awstats.www.sunsky.com.conf(根據你前面配置的站點信息生成的文件),將LoadPlugin="hostinfo"替換為LoadPlugin="qqhostinfo"即可。
- sed -i 's#\#LoadPlugin="hostinfo"#LoadPlugin="qqhostinfo"#g' /etc/awstats/awstats.www.sunsky.com.conf
- sed -i 's#\#LoadPlugin="hostinfo"#LoadPlugin="qqhostinfo"#g' /etc/awstats/awstats.www.skysun.com.conf
切記,在這些替換完之后一定要查看替換是否成功,以便及早發生紕漏。
- grep "LoadPlugin=\"qqhostinfo\"" /etc/awstats/awstats.www.sunsky.com.conf
如果檢查無誤,那么我們的ip地址位置顯示就配置好了,在后面的日志分析中,我們就可以清楚的看到來訪ip的地理位置信息了。
四、配置apache
首先我們打開apache的主配置文件/usr/local/apache/conf/httpd.conf可以看到里面多出了以下幾行:
- # Directives to allow use of AWStats as a CGI
- Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
- Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
- Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
- ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
- # This is to permit URL access to scripts/files in AWStats directory.
- <Directory "/usr/local/awstats/wwwroot">
- Options None
- AllowOverride None
- Order allow,deny
- Allow from all
- </Directory>
我們可以看到awstats已經在apache的主配置文件配置好了需要的參數,是不是很方便啊。此時我們還需要在配置虛擬目錄配置文件里面配置幾個參數來實現站點的統計信息安全。
- vim /usr/local/apache/httpd/extra/httpd-vhosts.conf
添加以下兩行參數進去:
- auth_basic "Restricted";
- auth_basic_user_file /usr/local/nginx/htpasswd.pass;
添加之后的文件信息
- <VirtualHost *:80>
- ServerAdmin webmaster@dummy-host.example.com
- DocumentRoot "/www/sunsky"
- ServerName dummy-host.example.com
- ServerAlias www.sunsky.com
- CustomLog "|/usr/local/sbin/cronolog /app/logs/sunsky_access_%Y%m%d.log" combined
- ErrorLog "|/usr/local/sbin/cronolog /app/logs/sunsky_error_%Y%m%d.log"
- auth_basic "Restricted";
- auth_basic_user_file /usr/local/apache/htpasswd.pass;
- </VirtualHost>
- <VirtualHost *:80>
- ServerAdmin webmaster@dummy-host2.example.com
- DocumentRoot "/www/skysun"
- ServerName www.skysun.com
- CustomLog "|/usr/local/sbin/cronolog /app/logs/skysun_access_%Y%m%d.log" combined
- ErrorLog "|/usr/local/sbin/cronolog /app/logs/skysun_error_%Y%m%d.log"
- auth_basic "Restricted";
- auth_basic_user_file /usr/local/apache/htpasswd.pass;
- </VirtualHost>
接下來我們用下面的命令來生成加密文件和加密的賬號及密碼:
- htpasswd -c -m /usr/local/nginx/htpasswd.pass admin #用戶名為admin,回車之后輸入兩次密碼即完成創建
如果,你順利的執行了上面的所有操作,那么OK!現在你已經可以通過訪問:
- http://www.sunsky.com/awstats/awstats.pl?config=www.sunsky.com
- http://www.skysun.com/awstats/awstats.pl?config=www.skysun.com
來查看你多個站點的日志分析信息了。
五、配置awstats自動運行
為了讓整個日志的統計過程可以實現自動化,我們將awstats.sh腳本加入crontab定時任務中去
- 0 1 * * * /bin/sh /server/scripts/awstats_up.sh >/dev/null 2>&1
也許你會問為什么不把cronolog也加入開機啟動呢,因為cronolog已經默認被apache用來調用記錄日志,所以無需加入到crontab定時任務中。
至此,我們已經通過在nginx和apache上部署awstats日志訪問分析工具來實現了對站點來訪信息的分析。整個系列的博文不多,只有三篇,不過還算是詳盡,把改涉及到的都涉及到了。中間有很多技術是連同的,比如在apche上進行的多站點,在nginx上的靜態化訪問等,盡管我沒有再出,不過我們都可以將他們來回應用實現部署需求。我也相信,只有融會貫通了,我們大家才能更好的部署好這一利器!
本文作者:sunsky,博客地址:http://sunsky.blog.51cto.com/