Câu hỏi hay.
Đối với GA, cập nhật máy chủ diễn ra sau bốn giờ và sau mỗi lần cập nhật thứ sáu, toàn bộ thiết lập được tính lại, có nghĩa là trễ 24 giờ từ thay đổi mã sang phản hồi đáng tin cậy. Sự chậm trễ này cũng áp dụng cho hầu hết các tùy chỉnh cho Trình duyệt GA (ví dụ: "bộ lọc tùy chỉnh").
Vì vậy, nếu bạn định sử dụng GA làm hệ thống chỉ số web của mình và bạn thực sự muốn dựa vào những dữ liệu đó thì cần phải kiểm tra giàn khoan.
Đối với tôi, việc nhóm các hệ thống thử nghiệm cho phân tích phía máy khách bằng hai số liệu là hữu ích: (i) hệ thống hoàn chỉnh, khép kín (vòng kín); hoặc (ii) dữ liệu tự động đơn giản kéo từ hệ thống sản xuất (bởi "hệ thống sản xuất" ở đây tôi có nghĩa là hệ thống của GA, không phải là Trang có các mã GA đang theo dõi).
Đối với sau này, chỉ cần thêm dòng này vào mỗi trang của trang web của bạn có chứa mã theo dõi GA, ngay dưới '__trackPageview()':
pageTracker._setLocalRemoteServerMode();
dòng đó sẽ gây ra một bản sao của mỗi dòng giao dịch được ghi vào nhật ký hoạt động của máy chủ - về bản chất, bạn lấy dữ liệu được GA thu thập trong thời gian thực Đó là tất cả những gì bạn cần làm để nắm bắt dữ liệu; để phân tích cú pháp, bạn có thể sử dụng, ví dụ: bất kỳ trình phân tích nhật ký web nguồn mở tuyệt vời nào như AWStats hoặc cuộn của riêng bạn. Đây là đơn giản và đáng tin cậy - nhưng tất cả những gì nó có thể làm là cho bạn biết (trong thời gian thực) "mã phân tích tôi vừa triển khai trên các trang được phục vụ bởi máy chủ sản xuất của tôi có thực sự hoạt động không?"
Thông thường, điều đó không đủ tốt - bạn muốn biết mã của mình có hoạt động hay không trước trên máy chủ sản xuất của bạn. Để làm điều đó, bạn cần mô phỏng môi trường sản xuất và tìm cách truy cập trong thời gian thực mà dữ liệu GA thu thập.
Loại giàn khoan thử nghiệm này có liên quan nhiều hơn một chút, nhưng vẫn không khó.
Tóm lại, nó đòi hỏi các bước sau:
host/phân phát ga.js và theo dõi pixel tại địa phương;
ghi lại yêu cầu __utm.gif (trong luồng dữ liệu GA GA, mỗi yêu cầu tương ứng với một lần đăng nhập giao dịch); và
phân tích cú pháp tiêu đề thành một số biểu mẫu dễ đọc có thể đọc được.
Nếu bạn muốn biết thêm chi tiết hơn (ví dụ, một bước-by-step thực hiện), ở đây nó là:
I. Hosting/Phục vụ GA Script (& tự động cập nhật
Để thực hiện điều đó, bạn có thể tạo một tập lệnh shell nhỏ như thế này để tải phiên bản ga.js mới nhất vào thư mục cục bộ của bạn (thay thế phiên bản mở rộng nó tìm thấy ở đó)
#!/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;
(Nhờ AskApache.com, trong đó cung cấp động lực và cấu hình chi tiết ban đầu để làm điều này trong một bối cảnh sản xuất.)
II. Tạo __utm.gif tập tin
Đây chỉ là một hình ảnh 1x1 pixel gif trong suốt, mà bạn sẽ đặt trong thư mục trang web (không quan trọng đâu, nó chỉ cần phù hợp với vị trí đọc trong các trang của bạn)
III. Ghi lại các yêu cầu __utm.gif
Đối với giao thức thử nghiệm mà bạn là nguồn của hoạt động phía máy khách (ví dụ: bạn muốn xác minh độ trung thực của một số mã theo dõi sự kiện mà bạn đã thêm vào một trang trên Trang web của bạn, vì vậy bạn tự động hóa 5000 lần nhấp vào nút bạn vừa kết nối, phục vụ trang từ máy chủ dev của bạn được thiết lập cho mục đích này) có thể đơn giản nhất chỉ cần ghi lại Tiêu đề Yêu cầu, vì nó nằm trong các tiêu đề đó tập lệnh GA hướng khách hàng thu thập dữ liệu khác nhau từ DOM, từ thanh địa chỉ (url) và từ các tiêu đề http trước và thêm chúng vào yêu cầu cho tài nguyên trên máy chủ GA (__utm.gif, mà chỉ là Pixel 1x1 trong suốt).
Đối với loại giao thức này, tôi sử dụng trình bổ sung Firefox, LiveHTTPHeaders. Bạn cài đặt nó giống như bất kỳ addon Firefox nào khác, một vài cú click chuột là tất cả. Tiếp theo, mở nó và nhấp vào tab "Máy phát điện". Từ cửa sổ này, bạn có thể thấy các yêu cầu thực tế trong thời gian thực. Ở dưới cùng của cửa sổ là một nút 'lưu' để lưu trữ nhật ký. Tôi thấy dễ dàng hơn khi cấu hình LiveHTTPHeaders để chỉ ghi lại các yêu cầu __utm.gif; để làm điều đó, chỉ cần nhấp vào tab 'Chỉnh sửa' và tạo bộ lọc siimple để loại trừ mọi thứ ngoại trừ những hình ảnh gif cụ thể này (sử dụng hộp kiểm ở bên phải và hộp văn bản lớn ở bên phải).
Các loại giao thức thử nghiệm khác yêu cầu bạn làm việc từ Nhật ký hoạt động máy chủ của bạn; trong trường hợp đó chỉ cần thêm dòng này vào mỗi trang của trang web của bạn, ngay dưới __trackPageview():
pageTracker._setLocalRemoteServerMode();
IV. Phân tích cú pháp các yêu cầu đã đăng nhập để bạn thực sự có thể đọc chúng
Vì vậy, bây giờ nhật ký của bạn sẽ chứa các dòng chuyển giao riêng lẻ, mỗi dòng là một chuỗi được nối vào Yêu cầu HTTP cho pixel theo dõi GA. Chuỗi này chỉ là một chuỗi các cặp khóa-giá trị, mỗi khóa bắt đầu bằng các chữ cái "utm" (có thể là cho "trình theo dõi nhím"). Mỗi tham số này tương ứng với biến mà bạn thấy trong Trang tổng quan GA (dưới đây là complete list và mô tả về chúng). Đây là tất cả những gì bạn cần biết để xây dựng một trình phân tích cú pháp.Cụ thể hơn:
Thứ nhất, đây là một vệ sinh __utm.gif yêu cầu (các mục trong LiveHTTPHeaders bạn đăng nhập):
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
Đây là phân tích cú pháp của tôi (trong 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)))
Kết quả trông giống như sau:
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
Để tránh thực hiện việc này lâu hơn nữa, tôi đã bỏ qua giá trị của cookie. Họ rõ ràng yêu cầu một bước phân tích cú pháp riêng biệt, mặc dù nó hầu như giống hệt với bước tôi vừa trình bày. Một lần nữa, mỗi yêu cầu đại diện cho một giao dịch duy nhất, vì vậy bạn có thể lưu trữ chúng khi cần.
Doug, cảm ơn bài đăng chi tiết như vậy! Tôi chắc chắn sẽ cung cấp cho một thử và thông báo cho bạn về sự tiến bộ của tôi vào tuần tới. Có lẽ bạn muốn tạo một dự án google và tôi có thể đóng góp để phát triển một bộ khác mà người khác có thể sử dụng? –
Ý tưởng hay, Salman. Tôi sử dụng GibHub, vì vậy tôi sẽ đưa nó lên đó vào tuần tới và cho bạn biết khi tôi làm và nơi để tìm thấy nó. – doug
@doug đã làm điều này bao giờ đi lên trên Github? Tôi rất muốn nhìn thấy nó nếu nó ... – s6mike