Google Analytics实时沙箱环境

Sal*_*cha 8 google-analytics

我正在寻找一种方法来设置谷歌分析沙箱环境,这将允许我实时测试我的自定义js代码.

我的应用程序将使用自定义变量进行高级细分,我想快速测试多个场景,而不是设置虚拟GA帐户并等待一整天来确认测试.

谢谢

dou*_*oug 17

好问题.

对于GA,服务器更新每四个小时发生一次,并且在每六次这样的更新之后,重新计算整个集合,这意味着从代码更改到可靠反馈的24小时滞后.此延迟也适用于GA浏览器的大多数自定义(例如,"自定义过滤器").

因此,如果您要将GA用作Web度量系统,并且您希望实际上依赖于这些数据,那么测试装备是必不可少的.

对我来说,使用两个标准对客户端分析的测试系统进行分组是有用的:(i)完整的,独立的(闭环)系统; 或者(ii)从生产系统中提取更简单的自动数据("生产系统"在这里指的是GA的系统,而不是GA代码正在跟踪的页面的网站).

对于后者,只需将此行添加到您网站的每个页面,其中包含GA跟踪代码,就在"__trackPageview()"下方:

pageTracker._setLocalRemoteServerMode();
Run Code Online (Sandbox Code Playgroud)

该行将导致每个事务行的副本记录到服务器的活动日志中 - 因此实质上,您可以实时获取GA捕获的数据这就是捕获数据所需的全部内容; 要解析它,你可以使用任何优秀的开源Web日志分析器,如AWStats,或者自己动手.

这很简单可靠 - 但它能做的就是告诉你(实时)"我刚刚在我的生产服务器服务的页面上实现的分析代码是否真的有效?"

通常情况下,这还不够好 - 您宁愿知道您的代码是否可以生产服务器上运行.为此,您需要模拟生产环境并找到实时访问GA收集的数据的方法.

这种测试装置有点复杂,但仍然不难.

总而言之,它需要以下步骤:

  1. 在本地托管/提供ga.js和跟踪像素;

  2. 记录__utm.gif请求(在GA数据流中,每个请求对应一个记录的事务); 和

  3. 将标题解析为一些方便的人类可读形式.


如果您想要更多细节(即逐步实施),这里是:

I.托管/提供GA脚本(并自动更新

要做到这一点,你可以创建一个像这样的小shell脚本,将最新的ga.js版本输入你的本地目录(替换它在那里找到的现有版本).

#!/bin/sh
rm /My_Sites/sitename.com/analytics/ga.js
cd /My_Sites/sitename.com/analytics/
wget http://www.google-analytics.com/ga.js
chmod 644 /My_Sites/sitename.com/analytics/ga.js
cd ${OLDPWD}
exit 0;
Run Code Online (Sandbox Code Playgroud)

(感谢AskApache.com,它提供了在生产环境中执行此操作的原始动机和配置详细信息.)


II.创建__utm.gif文件

这只是一个透明的1x1像素gif图像,您将放置在Site目录中(无论何处,只需要匹配页面中列出的位置)


III.记录__utm.gif请求

对于您是客户端活动来源的测试协议(例如,您要验证已添加到网站页面的某些事件跟踪代码的跨浏览器保真度,因此您可以自动执行5000次点击在您刚刚连接的按钮上,为您设置的开发服务器服务页面)最简单的方法是只记录请求标头,因为GA脚本指示客户端从DOM收集各种数据的那些标头中,从位置栏(url)和之前的http标头,并将它们附加到GA服务器上的资源请求(__ utm.gif,它只是1x1透明像素).

对于这种类型的协议,我使用Firefox插件,LiveHTTPHeaders.你可以像任何其他Firefox插件一样安装它,只需点击几下鼠标即可.接下来,打开它,然后单击"生成器"选项卡.在此窗口中,您可以实时查看实际请求.在窗口的底部是一个"保存"按钮来存储日志.我发现配置LiveHTTPHeaders只能记录__utm.gif请求更容易; 要做到这一点,只需单击"编辑"选项卡并创建一个简单的过滤器,以排除除这些特定gif图像之外的所有内容(使用右侧的复选框和右侧的大文本框).

其他类型的测试协议要求您使用服务器活动日志; 在这种情况下,只需将此行添加到您网站的每个页面,就在__trackPageview()下面:

pageTracker._setLocalRemoteServerMode();
Run Code Online (Sandbox Code Playgroud)

IV.解析那些记录的请求,以便您可以实际读取它们

因此,现在您的日志将包含单独的转换行,每个转换行都是附加到GA跟踪像素的HTTP请求的字符串.这个字符串只是键值对的串联,每个键都以字母"utm"开头(可能是"urchin tracker").这些参数中的每一个都对应于您在GA仪表板中看到的变量(这里是它们的完整列表和说明).这是构建解析器所需要知道的全部内容.更详细:

首先,这是一个已清理的__utm.gif请求(LiveHTTPHeaders日志中的条目):

http://www.google-analytics.com/__utm.gif?utmwv=1&utmn=1669045322&utmcs=UTF-8&utmsr=1280x800&utmsc=24-bit&utmul=en-us&utmje=1&utmfl=10.0%20r45&utmcn=1&utmdt=Position%20Listings%20%7C%20Linden%20Lab&utmhn=lindenlab.hrmdirect.com&utmr=http://lindenlab.com/employment&utmp=/employment/openings.php?sort=da&&utmac=UA-XXXXXX-X&utmcc=__utma%3D87045125.1669045322.1274256051.1274256051.1274256051.1%3B%2B__utmb%3D87045125%3B%2B__utmc%3D87045125%3B%2B__utmz%3D87045125.1274256051.1.1.utmccn%3D(referral)%7Cutmcsr%3Dlindenlab.com%7Cutmcct%3D%2Femployment%7Cutmcmd%3Dreferral%3B%2B
Run Code Online (Sandbox Code Playgroud)

这是我的解析器(在Python中):

# regular expression module imported
import re

pattern = r'\&{1,2}'
pat_obj = re.compile(pattern)

# splitting the gif request on the '&' character 
# (which GA originally used to concatenate each piece to build the request)
# (here, i've bound the __utm.gif to the variable by 'gfx')
gfx1 = pat_obj.split(gfx)

# create a look-up table to map a descriptive name to each gif request parameter
# (note, this isn't the entire list, which i've linked to above)
keys = "utmje utmsc utmsr utmac utmcc utmcn utmcr utmcs utmdt utme utmfl utmhn utmn utmp utmr utmul utmwv"
values = "java_enabled screen_color_depth screen_resolution account_string cookies campaign_session_new repeat_campaign_visit language_encoding page_title event_tracking_data flash_version host_name GIF_req_unique_id page_request referral_url browser_language gatc_version"
keys = keys.strip().split()

#create the look-up table
GIF_REQUEST_PARAMS = dict(zip(keys, values))

# parse each request parameter and map the parameter name to a descriptive name:
pattern = r'(utm\w{1,2})=(.*?)$'
pat_obj = re.compile(pattern)

for itm in gfx1 :
    m = pat_obj.search(itm)
    if m :
        fmt = '{0:25} {1:10}'
        print( fmt.format( GIF_REQUEST_PARAMS[m.group(1)], m.group(2) ) )
Run Code Online (Sandbox Code Playgroud)

结果如下:

    gatc_version              1         
    GIF_req_unique_id         1669045322
    language_encoding         UTF-8     
    screen_resolution         1280x800  
    screen_color_depth        24-bit    
    browser_language          en-us     
    java_enabled              1         
    flash_version             10.0%20r45
    campaign_session_new      1         
    page_title                Position%20Listings%20%7C%20Linden%20Lab
    host_name                 lindenlab.hrmdirect.com
    referral_url              http://lindenlab.com/employment
    page_request              /employment/openings.php?sort=da
    account_string            UA-XXXXXX-X
    cookies
Run Code Online (Sandbox Code Playgroud)

为了避免更长时间,我省略了cookie的价值.它们显然需要一个单独的解析步骤,尽管它几乎与我刚刚展示的步骤相同.同样,每个请求代表一个事务,因此您可以根据需要存储它们.