我感兴趣的是尝试对我的 apache 服务器所提供的所有虚拟主机进行并排使用情况比较。
在最简单的情况下,我想查看每个虚拟主机以及该站点上的请求/流量数量的列表(或条形图)。
我一直在研究 webalyzer 和 awstats,但无法在同一个信息图中比较多个虚拟主机。
有人对执行此操作的工具有什么建议吗(或者我如何使用上述工具来执行此操作)?
答案1
嗯,一般来说,使用虚拟主机时,我会为每个虚拟主机设置不同的访问日志。如果是这种情况,而您只想要点击量:
wc -l foo_vhosts.access*
这会计算行数,也就是日志总数,也就是您获得的命中次数。但您应该说明是否记录到不同的文件,并发布示例日志条目。
如果您没有记录到不同的文件,并且您的日志记录格式不包含%v
其格式,那么您就不太走运了,除非您可以将每个 uri 与其虚拟主机关联起来。
答案2
首先,您需要更改日志格式,以便虚拟主机记录在每个日志条目中。类似下面的内容将为您带来组合/扩展格式,并附带 %v,即虚拟主机名:
LogFormat "%h %v %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" LogServerName
然后,您必须告诉 apache 使用这种日志格式。可以全局添加类似以下内容,也可以将其添加到单个虚拟主机(全局添加更容易)。事实上,我通常将上述行和这一行放在一个名为 /etc/httpd/conf.d/access_logging.conf 的文件中:
CustomLog /var/log/httpd/global_access.log LogServerName
完成此操作后,您至少可以关闭不同的虚拟主机。然后您可以使用类似佩蒂特或者独特执行以下操作。
cat /var/log/httpd/global_access.log | awk'{打印$2}'| petit --hash
另外,您可以使用 racecar 进行带宽分析。对于大文件,它可能会有点慢,但它很快而且很粗糙。
for i in `cat /var/log/httpd/global_access.log | awk '{print $2}'`; do cat /var/log/httpd/global_access.log | grep $i | racecar; done
关联:http://crunchtools.com/software/petit/ 关联:http://crunchtools.com/software/racecar/
答案3
@kyle,cut -f 1 -d''combinedlog | sort | uniq -c | sort -nr