多台服务器上的独立访客

多台服务器上的独立访客

我有几个服务器的 apache 访问日志(多个服务器服务于同一个域)。计算给定时间段内唯一访问者的最简单方法是什么。我使用的是 linux,因此 linux 环境解决方案是首选

我现在不想安装 AWStats 只是为了获取数字。或者这真的是最简单的方法吗?

答案1

您无法从访问日志中确定实际的唯一人类访问者。如果您想假设每个唯一的客户端 IP 地址都是一个唯一的访问者,那么您只需输入您想要的时间段内的所有日志cut -d ' ' -f 1 |sort -u |wc -l(假设标准日志格式中客户端 IP 是第一个字段)。这不考虑监控、蜘蛛、NAT、代理或动态 IP 地址,但如果不花费比设置 awstats 更多的时间,您就无法做得更好。

答案2

使用 Apache 访问日志来跟踪唯一访问者比较困难,但如果您想要一个可以使用 shell 进行的快速粗略测量,我已经使用并测试了以下内容。

因此,从 11 月到现在的 3 天来看,Analytics 估计我的网站共有 1,586 位独立访客。

这篇 shell 文章给我带来了 1402 位访客,考虑到所有因素,这个数字并不低。总而言之,日志很难阅读,但这篇文章很粗糙,而且相对较快

这只适用于 Apache 的组合格式,如果你的工作不是这种格式,则需要对其进行修改

我在这里将其格式化为多行,以便更好地解释它。

awk -F'"' '{print $1,$6}' < log | \
    sed -e 's/\[\([0-9]\+\/[A-Za-z]\+\/[0-9]\+\).*\]/\1/' | \
    awk '{print $4, $0}' | \
    sort | uniq | \
    awk '{print $1}' | \
    uniq -c

第 1 行:从访问日志中打印客户端的 IP、时间戳和用户代理

第 2 行:删除时间戳的“时间”部分,以便我们可以按日期对行进行分组

第 3 行:将日期移至行首,以便我们可以按日期排序(这对于单个日志文件来说不是必需的,但您可以修改脚本以使用多个文件并按日期排序,这很有帮助)

第 4 行:sort | uniq 基本上对所有行进行排序并删除重复项(即,来自同一 IP、同一天使用同一用户代理的多次点击现在计为 1 次点击 - 这就是魔力)

第 5 行:仅打印日期部分

第 6 行:使用 uniq 计数函数按日期对这些行进行分组,并告诉我们其中有多少行

示例输出:

538 16/Nov/2009
559 17/Nov/2009
305 18/Nov/2009

它非常粗糙,但是简单、快捷,并且易于合并多个日志文件。

相关内容