客户端分析和Apache日志之间的差异

我碰巧比较了谷歌分析报告与Apache访问日志,并显示了惊人的250%下降。

我们安装了一个wordpress安装,在一个ELB和一个NFS服务器,RDS和一个弹性caching后面安装了2个Web服务器。

我进行分析的方式如下:

  1. 在所有页面上放一个简单的JavaScript,在我的服务器上ping PageReady,即OnDomContentLoaded事件,并loggingIP地址的页面URL。 由于这是最简单的JavaScript代码,我的假设是它应该在大多数浏览器上运行,并且结果非常接近由google-analytics生成的结果。
  2. 我检查访问日志上的合法请求(消除没有用户代理的请求+没有引用URL的情况等),只检查产生200,206,301,302响应代码的请求。

当我比较由客户端生成的服务器ping(由1提到的自定义JavaScript)和apache访问日志,下降似乎接近250%。

所以这意味着那些缺lessIP的客户端并没有执行JavaScript,但令人费解的是服务器正在发送200个状态码。 所以我得出的结论是,服务器发送一个空的答复最。 (我已经占了很less的用户closuresJavaScript,一些错误等),但我无法testing的假设。 (如果是这样的话)。

  • mod_dumpio不让我将响应主体映射到客户端IP。

  • 审计日志似乎不支持响应主体的日志logging。

考虑到这些事情,请有人指出正确的方向吗?

澄清:

由于我没有名誉来添加评论,我想在这里添加几点。

我只看文件请求,即排除所有的CSS和JS和图像文件,并且我过滤了谷歌机器人和其他可疑的抓取。 所有这一切都有一个明显的下降高达250%。

只检查产生200,206,301,302个响应码的请求。

这将超过。 超额计算的金额取决于您所服务的301和302的数量。 接收到301或302的浏览器将redirect,而不发送您的JavaScript ping,并且大概稍后会生成一个200,这样会产生重复计数。

过滤机器人的请求,并且对css,javascript和图像的请求可能容易出错。 相反,我会build议在您的网站上select您知道JS分析工作的单个页面(例如,主页),并且只计算查询。 另外,从通常代表真实浏览器的日志中select一个通用的用户代理,然后只计算查询。 如果数字更接近匹配,可以扩大你的范围。

也有可能你的JS在每个浏览器中都不能正常工作。 尝试设置您网站的testing实例,然后使用像https://www.browserstack.com/这样的服务将其加载到多个浏览器中。 按用户代理分组日志。 任何发出主要请求但不发送ping的用户代理可能在执行你的JS时遇到问题。 启动该用户代理的副本并testing你的JS。

您的apache日志将报告许多分析不计入的内容。 这些包括:

  • CSSJavaScript图像和其他内容包括在您的内容页面。 这些应该被caching,所以重复的访问者不应该在随后的页面上检索它们。 但是,如果他们启动新的浏览器会话,您应该看到HEAD请求。
  • 被索引你的网站的机器人扫描的内容。 在用户代理字段中查找+http:// ,但不是所有的蜘蛛都遵循这个标准。
  • 有些用户将使用禁用脚本的工具,因此分析报告中将缺less合法的stream量。