apache日志轮询设置讲解.docx
- 文档编号:30170860
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:16
- 大小:25.98KB
apache日志轮询设置讲解.docx
《apache日志轮询设置讲解.docx》由会员分享,可在线阅读,更多相关《apache日志轮询设置讲解.docx(16页珍藏版)》请在冰豆网上搜索。
apache日志轮询设置讲解
Apache日志轮询
使用cronolog和webalizer分割和分析apache日志
web服务器的日志对于网站管理者来说有非常重要的作用,对于分析网站的访问情况、搜索引擎的抓取、图片盗链、非法抓取等有很大的帮助。
目前apache是最为广泛应用的web服务器,apache的日志功能能通过访问日志可以比较详细的记录网站服务器的被请求情况,但是要更好的根据日志来维护和管理网站则需要其他的工具来分析日志,以生成便于查看的报表。
默认安装的apache在运行时会产生两个日志文件,access_log用于存放访问记录,error则存放出错记录。
日志的生成格式可以定制的,需要在配置文件中定义
LogFormat"%h%l%u%t\"%r\"%>s%b"common
CustomLoglogs/access_logcommon
上面的配置是最常用的一种记录格式,产生的日志格式如下:
127.0.0.1--[02/Jan/2007:
19:
41:
07+0800]"GET/themes/original/img/s_error.pngHTTP/1.1"200272
这是一条典型的apache访问记录,这条记录里面包含有远程访问IP(127.0.0.1)、访问者身份(现在一般缺省,以-代替)、访问者标识(缺省以-代替)、请求时间(02/Jan/2007:
19:
41:
07+0800)、请求方式(GET)、请求的协议(HTTP/1.1)、请求的资源(/themes/original/img/s_error.png)、响应情况(200,代表成功)、传输的字节数(272)。
还有一种比较常用的格式
LogFormat"%h%l%u%t\"%r\"%>s%b\"%{Referer}i\"\"%{User-agent}i\""combined
CustomLoglog/access_logcombined
127.0.0.1--[02/Jan/2007:
19:
41:
07+0800]"GET/themes/original/img/s_error.pngHTTP/1.1"200272"""Mozilla/5.0(X11;U;Linuxi686;en-US;rv:
1.8.1.1)Gecko/20061208Firefox/2.0.0.1"
Referer标示记录下来源,User-Agent则会记录客户端浏览器提供的一些识别信息,比如操作系统类别、浏览器类型和版本等,当然也可能是爬虫的信息。
记录这些日志对于一个访问量比较大的网站来说是需要很多空间的,而且我们也没必要去保存三个月前的日志。
apache提供了日志滚动和管道日志的功能来解决这个问题。
CustomLog"|/usr/local/apache/bin/rotatelogs/usr/local/apache/logs/access_log86400"common
这条命令利用apache提供的rotatelogs每24小时滚动一次日志。
当然,现在还有一个工具cronolog被广泛的应用
CustomLog"|/usr/local/sbin/cronolog/usr/local/apache/logs/access_log%m%d"combined
按天分割日志并且日志按照日期记录为access_log.0102的格式。
然后可以写脚本定期使用gzip程序将日志压缩备份或者定期进行清理。
101***/bin/rm-f/usr/local/apache/logs/`date--date"5daysago"+access_log.\%m\%d`
加到crontab中,每天1点10分删除5天前的日志
apache帮我们记录一些重要的信息,现在就要对这些信息进行分析,这样日志才能对我们管理和维护网站有所帮助。
webalizer是一个非常流行的日志分析工具。
前面已经处理了apache的轮询,现在只要配置好webalizer就可以得到日志的分析结果。
01***/bin/cp-f/usr/local/apache/logs/`date-dyesterday+access_log.%m%d`usr/local/webalizer/logs/access.log
每天1点将日志拷贝一份供webzlizer分析使用
apache日志轮询2
面是设定时做的一些笔记…
◎使用cronolog固定时间产生一个log档
参考:
安装cronolog
$sudoapt-getinstallcronolog
安装好之后修改Apache的设定档,将原本的log设定,如:
ErrorLog/var/log/apache2/error.log
CustomLog/var/log/apache2/access.logcombined
改成
ErrorLog“|/usr/bin/cronolog/var/log/apache2/%Y%m%d.error.log”
CustomLog“|/usr/bin/cronolog/var/log/apache2/%Y%m%d.access.log”combined
前面的“|”那是pipeline给cronolog作处理的意思
%Y%m%d就是今天的日期显示成像20091222这样
◎不要记录internaldummyconnection
参考:
http:
//www.ihao.org/ss/html/76/t-3276.html
在Apache的access.log里出现大量的internaldummyconnection
127.0.0.1–-[27/Jan/2009:
23:
55:
25+0800]“OPTIONS*HTTP/1.0″200–“-”“Apache/2.2.8(Ubuntu)PHP/5.2.4-2ubuntu5.4withSuhosin-Patch(internaldummyconnection)”
这个问题不会影响apache的运作,如果觉得碍眼可以在/etc/apache2/sites-available/default中,将
CustomLog/var/log/apache2/access.logcombined
改为:
SetEnvIfRemote_Addr“127.0.0.1″dontlog
CustomLog/var/log/apache2/access.logcombinedenv=!
dontlog
就不会再有127.0.0.1的记录了
◎使用AWStats分析log记录档
参考:
http:
//twntwn.info/blog/ajer001/archives/2665
安装AWStats及解决UTF-8关键字、UTF-8中文显示问题
安装AWStats
$sudoapt-getinstallawstats
AWStats的原始设定档在/etc/awstats/awstats.conf
我们要为每个虚拟服务器新增一个设定档
例如helloox代表使用helloox的虚拟服务器
其记录档为/var/log/apache2/%Y%m%d.helloox.access.log
新增一个helloox的AWStats设定档
$cd/etc/awstats
$sudocpawstats.confawstats.helloox.conf
====编辑awstats.helloox.conf档====
找到LogFile,设为Apache记录档的位置:
LogFile=”/var/log/apache2/%YYYY-0%MM-0%DD-0.helloox.access.log”
找到LogFormat,设为1代表log档的格式为Apache的combined
LogFormat=1
找到SiteDomain,改为网域位址:
SiteDomain=”disp.twbbs.org”
找到DirCgi,原本是cgi-bin,改成awstats比较好记
这名字是要用来放在www目录下,连到/usr/lib/cgi-bin的连结
DirCgi=”/awstats”
要让产生的网页上有「立即更新」的按钮,将下面这个值设为1
AllowToUpdateStatsFromBrowser=1(改为使用工作排程每日自动更新)
如果希望指定语系,可以找到892行左右的Lang,指定为我们后面要修改的中文UTF-8:
Lang=”tw-utf8″
为了让关键字正常显示,找到1261行左右的#LoadPlugin=”decodeutfkeys”,把注解拿掉:
LoadPlugin=”decodeutfkeys”
====完成设定档的设定====
在disp.twbbs.org的Apache虚拟服务器设定档加上相关设定
(设定档预设是/etc/apache2/sites-available/default
我自己有另外设一个/etc/apache2/sites-available/helloox)
加上:
Alias/awstatsclasses/“/usr/share/awstats/lib/”
Alias/awstats-icon/“/usr/share/awstats/icon/”
Alias/awstatscss“/usr/share/doc/awstats/examples/css”
ScriptAlias/awstats//usr/lib/cgi-bin/
OptionsExecCGI-MultiViews+SymLinksIfOwnerMatch
OptionsNone
AllowOverrideNone
Orderallow,deny
AllowfromAll
重开Apache:
$sudo/etc/init.d/apache2restart
将网页的语言改为UTF-8
编辑/usr/lib/cgi-bin/awstats.pl
找到252行左右,将‘zh-tw’=>’tw’修改成:
‘zh-tw’=>’tw-utf8′
修改相关的语系档:
$cd/usr/share/awstats/lang
$sudocatawstats-tw.txt|sed-e’s/big5/utf-8/’|iconv-fbig5-tutf8>awstats-tw-utf8.txt
上面这行是批次将awstats-tw.txt这个档案中的big5通通改成utf-8
然后将编码由big5转换为utf8,最后存成awstats-tw-utf8.txt的意思
可能会出现权限不足的问题,可先用$sudosu变成root再执行这行
接着就可以试着Update看看:
$sudo/usr/lib/cgi-bin/awstats.pl-config=disp_lab-update
最后就可以连到网页去看看了:
http:
//disp.twbbs.org/awstats/awstats.pl?
config=helloox
要在网页中点update按钮来更新,要让Apache的使用者账号www-data有
1.读写DirData(预设是/var/lib/awstats)及里面档案的权限
2.读取log资料夹(在/var/log/apache2)及里面档案的权限
将这两个资料夹的使用者及群组都改成www-data即可
因为用了cronolog使每日的log档都会换档名,Update就只会更新今天的log档
所以改为使用crontab每日换log档前自动更新
$sudovim/etc/crontab
加上这行:
5523***root/usr/lib/cgi-bin/awstats.pl-config=helloox-update
就是每天晚上11:
55时更新一下的意思
之后设定其他虚拟服务器XXX时,只要复制awstats.helloox.conf
将档名及内容中的helloox改成XXX
然后连至网址「http:
//disp.twbbs.org/awstats/awstats.pl?
config=XXX」即可
Apache远程日志
1、vihttpd.conf
将
ErrorLoglogs/error_log
LogLevelwarn
CustomLoglogs/access_logcombined
改为
ErrorLog"|/usr/bin/logger-thttpd-plocal4.info"
LogLevelnotice
CustomLog"|/usr/bin/logger-tapache-plocal5.info"combined
2、vi/etc/syslog.conf,添加
local4.info /var/log/error_log.log
local5.* /var/log/access_log.log
*.*;mail.none;authpriv.none;cron.none;kern.none;local7.none @10.31.0.226
3、重启httpd及syslog服务
servicehttpdrestart
servicesyslogrestart
4、进入远程主机,vi/etc/sysconfig/syslog,修改
SYSLOGD_OPTIONS="-m0" 为
SYSLOGD_OPTIONS="-r-m0"
vi/etc/syslog.conf,添加
local4.* /var/log/error_log.log
local5.* /var/log/access_log.log
即可。
5、vi/etc/logrotate.conf
添加如下行:
#apachelog
/var/log/error_log.log{
daily
create
rotate1
prerotate
/usr/bin/chattr-a/var/log/error_log.log
endscript
postrotate
/usr/bin/killall-HUPsyslogd
/usr/bin/chattr+a/var/log/error_log.log
mv/var/log/error_log.log.1/opt/log/error_log.`date-d"-1days"+%Y%m%d`
gzip/opt/log/error_log.`date-d"-1days"+%Y%m%d`
endscript
}
/var/log/access_log.log{
daily
create
rotate1
prerotate
/usr/bin/chattr-a/var/log/access_log.log
endscript
postrotate
/usr/bin/killall-HUPsyslogd
/usr/bin/chattr+a/var/log/access_log.log
mv/var/log/access_log.log.1/opt/log/access_log.`date-d"-1days"+%Y%m%d`
gzip/opt/log/access_log.`date-d"-1days"+%Y%m%d`
endscript
}
多服务器日志合并统计的必要性
越来越多大型的WEB服务使用DNS轮循来实现负载均衡:
使用多个同样角色的服务器做前台的WEB服务,这大大方便了服务的分布规划和扩展性,但多个服务器的分布使得日志的分析统计也变得有些麻烦。
如果使用webalizer等日志分析工具对每台机器分别做日志统计:
1会对数据的汇总带来很多麻烦,比如:
统计的总访问量需要将SERVER1SERVER2...上指定月份的数字相加。
2会大大影响统计结果中唯一访客数uniquevisits,唯一站点数uniquesites的等指标的统计,因为这几个指标并非几台机器的代数相加。
统一日志统计所带来的好处是显而易见的,但如何把所有机器的统计合并到一个统计结果里呢?
首先也许会想:
多个服务器能不能将日志记录到同一个远程文件里呢?
我们不考虑使用远程文件系统记录日志的问题,因为带来的麻烦远比你获得的方便多的多……
因此,要统计的多个服务器的日志还是:
分别记录=>并通过一定方式定期同步到后台=>合并=>后用日志分析工具来进行分析。
首先,要说明为什么要合并日志:
因为webalizer没有将同一天的多个日志合并的功能
先后运行
webalizerlog1
webalizerlog2
webalizerlog3
这样最后的结果是:
只有log3的结果。
能不能将log1< 因为一个日志的分析工具不是将日志一次全部读取后进行分析,而且流式的读取日志并按一定时间间隔,保存阶段性的统计结果。 因此时间跨度过大(比如2条日志间隔超过5分钟),一些日志统计工具的算法就会将前面的结果“忘掉”。 因此,log1< 只有log3的统计结果。 多台服务日志合并问题: 把多个日志中的记录按时间排序后合并成一个文件 典型的多个日志文件的时间字段是这样的: log1log2log3 00: 15: 0000: 14: 0000: 11: 00 00: 16: 0000: 15: 0000: 12: 00 00: 17: 0000: 18: 0000: 13: 00 00: 18: 0000: 19: 0000: 14: 00 14: 18: 0011: 19: 0010: 14: 00 15: 18: 0017: 19: 0011: 14: 00 23: 18: 0023: 19: 0023: 14: 00 日志合并必须是按时间将多个日志的交叉合并。 合并后的日志应该是: 00: 15: 00来自log1 00: 15: 00来自log2 00: 16: 00来自log1 00: 17: 00来自log3 00: 18: 00来自log2 00: 19: 00来自log1 .... 如何合并多个日志文件? 下面以标准的clf格式日志(apache)为例: apche的日志格式是这样的: %h%l%u%t\"%r\"%>s%b 具体的例子: 111.222.111.222--[03/Apr/2002: 10: 30: 17+0800]"GET/index.htmlHTTP/1.1"200419 最简单的想法是将日志一一读出来,然后按日志中的时间字段排序 catlog1log2log3|sort-k4-t"" 注释: -t"": 日志字段分割符号是空格 -k4: 按第4个字段排序,也就是: [03/Apr/2002: 10: 30: 17+0800]这个字段 -olog_all: 输出到log_all这个文件中 但这样的效率比较低,要知道。 如果一个服务已经需要使用负载均衡,其服务的单机日志条数往往都超过了千万级,大小在几百M,这样要同时对多个几百M的日志进行排序,机器的负载可想而之…… 其实有一个优化的途径,要知道: 即使单个日志本身已经是一个“已经按照时间排好序“的文件了,而sort对于这种文件的排序合并提供了一个优化合并算法: 使用-mmerge合并选项, 因此: 合并这样格式的3个日志文件log1log2log3并输出到log_all中比较好方法是: sort-m-t""-k4-olog_alllog1log2log3 注释: -m: 使用merge优化算法 注意: 合并后的日志输出最好压缩以后再发给webalizer处理 有的系统能处理2G的文件,有的不能。 有的程序能处理大于2G的文件,有的不能。 尽量避免大于2G的文件,除非确认所有参与处理的程序和操作系统都能处理这样的文件。 所以输出后的文件如果大于2G,最好将日志gzip后再发给webalizer处理: 大于2G的文件分析过程中文件系统出错的可能性比较大,并且gzip后也能大大降低分析期间的I/O操作。 日志的按时间排序合并就是这样实现的。 日志的轮循机制 让我们关心一下数据源问题: webalizer其实是一个按月统计的工具,支持增量统计: 因此对于大型的服务,我可以按天将apache的日志合并后送给webalizer统计。 WEB日志是如何按天(比如每天子夜00: 00: 00)截断呢? 如果你每天使用crontab: 每天0点准时将日志备份成access_log_yesterday mv/path/to/apache/log/access_log/path/to/apache/log/access_log_yesterday 的话: 你还需要: 马上运行一下: apacherestart否则: apache会因为的日志文件句柄丢失不知道将日志记录到哪里去了。 这样归档每天子夜重启apache服务会受到影响。 比较简便不影响服务的方法是: 先复制,后清空 cp/path/to/apache/log/access_log/path/to/apache/log/access_log_yesterday echo>/path/to/apache/log/access_log 严肃的分析员会这样做发现一个问题: 但cp不可能严格保证严格的0点截断。 加入复制过程用了6秒,截断的access_log_yesterday日志中会出现复制过程到00: 00: 06期间的日志。 对于单个日志统计这些每天多出来几百行日志是没有问题的。 但对于多个日志在跨月的1天会有一个合并的排序问题: [31/Mar/2002: 59: 59: 59+0800] [31/Mar/2002: 23: 59: 59+0800] [01/Apr/20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- apache 日志 设置 讲解