首页 运维 正文
日志分析工具Awstats实战之Apache篇:多站点日志分析

 2022-10-23    283  

前面两篇(日志分析工具Awstats实战之Nginx篇:分析结果静态化、日志分析工具Awstats实战之Nginx篇:分析结果动态化)都在讲述如何去部署nginx下的awstats日志分析工具,现在终于轮到apache。作为老牌的网页服务器,awstats对apache的支持非常完美,所以整个配置过程也是十分简单。因此,在这里我就拓展了一下部署,实现了对多站点的日志分析功能。

注意:自本篇博文发表之日,apache-2.4.x还是无法支持部署awstats日志分析结果访问动态化,不过可以用前篇日志分析工具Awstats实战之Nginx篇-分析结果静态化中讲到的方法来实施部署awstats。因此,本篇博文将用apache2.2.25版本来为大家讲解如何部署awstats日志分析结果动态化及多站点。

环境:

CentOS6.4x86_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.8apr-util-1.5.2
awstats-7.2.tar.gz

一、日志自动切割

由于apache自带的日志轮询工具rotatelogs,据专家说在进行日志切割时容易丢日志,所以这里我们就用cronolog来做日志切割。

1、下载并安装cronolog

cd/server/tools/
wgethttp://cronolog.org/download/cronolog-1.6.2.tar.gz
tarzxfcronolog-1.6.2.tar.gz
cdcronolog-1.6.2
./configure
make&&makeinstall

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)下

wgethttp://awstats.sourceforge.net/files/awstats-7.2.tar.gz
tarzxfawstats-7.2.tar.gz
mvawstats-7.2/usr/local/awstats

由于wget下载下来的包中权限是非root的,所以这里要修改权限,否则稍后*.pl将无法运行

chown-Rroot.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

此时会出现如下提示:

-----AWStatsawstats_configure1.0(build1.9)(c)LaurentDestailleur-----
ThistoolwillhelpyoutoconfigureAWStatstoanalyzestatisticsfor
onewebserver.Youcantrytouseittoletitdoallthatispossible
inAWStatssetup,howeverfollowingthestepbystepmanualsetup
documentation(docs/index.html)isoftenabetteridea.Aboveallif:
-Youarenotanadministratoruser,
-Youwanttoanalyzedownloadedlogfileswithoutwebserver,
-Youwanttoanalyzemailorftplogfilesinsteadofweblogfiles,
-Youneedtoanalyzeloadbalancedserverslogfiles,
-Youwantto'understand'allpossiblewaystouseAWStats...
ReadtheAWStatsdocumentation(docs/index.html).
----->RunningOSdetected:Linux,BSDorUnix
----->Checkforwebserverinstall
EnterfullconfigfilepathofyourWebserver.
Example:/etc/httpd/httpd.conf
Example:/usr/local/apache2/conf/httpd.conf
Example:c:\Programfiles\apachegroup\apache\conf\httpd.conf
Configfilepath('none'toskipwebserversetup):
>/usr/local/apache/conf/httpd.conf#有可能是新版本的原因,这里会自动找到apache的配置文件,无需我们再自己填了,不过会问你一次,你回答y即可
Yourwebserverconfigfile(s)couldnotbefound.
YouwillneedtosetupyourwebservermanuallytodeclareAWStats
scriptasaCGI,ifyouwanttobuildreportsdynamically.
SeeAWStatssetupdocumentation(filedocs/index.html)
----->Updatemodelconfigfile'/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf'
Fileawstats.model.confupdated.
----->Needtocreateanewconfigfile?
DoyouwantmetobuildanewAWStatsconfig/profile
file(requirediffirstinstall)[y/N]?y#询问是否创建一个新的配置文件,这里填y
----->Defineconfigfilenametocreate
Whatisthenameofyourwebsiteorprofileanalysis?
Example:www.mysite.com
Example:demo
Yourwebsite,virtualserverorprofilename:
>www.sunsky.com#这里让填写你的网站域名,虚拟主机名或者随便一个配置名
----->Defineconfigfilepath
Inwhichdirectorydoyouplantostoreyourconfigfile(s)?
Default:/etc/awstats
Directorypathtostoreconfigfile(s)(Enterfordefault):
>#这里要填写你配置文件存放路径,我们使用它默认的路径/etc/awstats,所以直接回车即可
----->Createconfigfile'/etc/awstats/awstats.www.sunsky.com.conf'
Configfile/etc/awstats/awstats.www.sunsky.com.confcreated.
----->Addupdateprocessinsideascheduler
Sorry,configure.pldoesnotsupportautomaticaddtocronyet.
Youcandoitmanuallybyaddingthefollowingcommandtoyourcron:
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl-update-config=www.sunsky.com
Orifyouhaveseveralconfigfilesandpreferhavingonlyonecommand:
/usr/local/awstats/tools/awstats_updateall.plnow
PressENTERtocontinue...#提示不能自动加入crontab定时任务,需要稍后自己添加,我们按回车继续即可
ASIMPLEconfigfilehasbeencreated:/etc/awstats/awstats.www.sunsky.com.conf
Youshouldhavealookinsidetocheckandchangemanuallymainparameters.
Youcanthenmanuallyupdateyourstatisticsfor'www.sunsky.com'withcommand:
>perlawstats.pl-update-config=www.sunsky.com
Youcanalsobuildstaticreportpagesfor'www.sunsky.com'withcommand:
>perlawstats.pl-output=pagetype-config=www.sunsky.com
PressENTERtofinish...#提示配置文件创建完成和如何更新配置及建立静态报告页,这里我们回车即可结束这个配置向导

结束这个向导以后,我们对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-Rdaemon/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/null2>&1
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl-update-config=www.skysun.com>/dev/null2>&1

该脚本里面用下面的命令也是可以的。

/usr/local/awstats/tools/awstats_updateall.plnow

运行该脚本生成分析结果:

/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可以看到里面多出了以下几行:

#DirectivestoallowuseofAWStatsasaCGI
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/"
#ThisistopermitURLaccesstoscripts/filesinAWStatsdirectory.
<Directory"/usr/local/awstats/wwwroot">
OptionsNone
AllowOverrideNone
Orderallow,deny
Allowfromall
</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>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot"/www/sunsky"
ServerNamedummy-host.example.com
ServerAliaswww.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>
ServerAdminwebmaster@dummy-host2.example.com
DocumentRoot"/www/skysun"
ServerNamewww.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.passadmin#用户名为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定时任务中去

01***/bin/sh/server/scripts/awstats_up.sh>/dev/null2>&1

也许你会问为什么不把cronolog也加入开机启动呢,因为cronolog已经默认被apache用来调用记录日志,所以无需加入到crontab定时任务中。

至此,我们已经通过在nginx和apache上部署awstats日志访问分析工具来实现了对站点来访信息的分析。整个系列的博文不多,只有三篇,不过还算是详尽,把改涉及到的都涉及到了。中间有很多技术是连同的,比如在apche上进行的多站点,在nginx上的静态化访问等,尽管我没有再出,不过我们都可以将他们来回应用实现部署需求。我也相信,只有融会贯通了,我们大家才能更好的部署好这一利器!

本文作者:sunsky,博客地址:http://sunsky.blog.51cto.com/

原文链接:https://77isp.com/post/8771.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。