Grande domanda.
Per GA, aggiornamenti del server si verificano ogni quattro ore, e dopo ogni sesto tale aggiornamento, l'intero set viene ricalcolato, il che significa un ritardo 24 ore dal cambiamento codice a risposte affidabile. Questo ritardo si applica anche alla maggior parte delle personalizzazioni del browser GA (ad esempio, "filtri personalizzati").
Quindi, se si intende utilizzare GA come sistema di metriche web e si prevede di fare affidamento su tali dati, è essenziale un banco di prova.
Per me, è utile raggruppare i sistemi di test per l'analisi lato client utilizzando due rubriche: (i) sistemi completi e autonomi (a circuito chiuso); o (ii) più semplici estrazioni automatizzate dei dati dal sistema di produzione (per "sistema di produzione" qui intendo il sistema di GA, non il Sito le cui pagine sono tracciate dal codice GA).
Per questi ultimi, basta aggiungere questa riga a ogni pagina del tuo sito che contiene il codice di monitoraggio GA, appena sotto '__trackPageview()':
pageTracker._setLocalRemoteServerMode();
Quella linea causerà una copia di ogni riga della transazione per essere loggato al registro delle attività del tuo server - in pratica, ottieni i dati acquisiti da GA in tempo reale. Tutto ciò che devi fare per acquisire i dati; per analizzarlo, è possibile utilizzare, ad esempio, uno degli eccellenti analizzatori di log web open source come AWStats o eseguire il rollover.
Questo è semplice e affidabile, ma tutto ciò che può fare è dirvi (in tempo reale) "il codice di analisi che ho appena implementato sulle pagine servite dal mio server di produzione funziona davvero?"
Di solito, questo non è abbastanza buono - preferiresti sapere se il tuo codice funzionerà prima del sul tuo server di produzione. Per fare ciò, è necessario simulare l'ambiente di produzione e trovare un modo per accedere in tempo reale ai dati raccolti da GA.
Questo tipo di banco di prova è un po 'più impegnativo, ma non ancora difficile.
In sintesi, si richiede come segue:
ospite/servire i ga.js e il pixel di tracciamento a livello locale;
log le richieste __utm.gif (nel flusso di dati GA, ogni richiesta corrisponde ad una registrati transazione); e
analizzare le intestazioni in qualche forma facilmente leggibile.
Se volete maggiori dettagli rispetto a quella (vale a dire, un'implementazione passo-passo), eccolo:
I. Hosting/servizio Script GA (& automatizzando gli aggiornamenti
per fare questo, è possibile creare un piccolo script di shell come questo per wget l'ultima versione ga.js nella directory locale (che sostituisce la versione esistente che trova lì).
#!/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;
(Grazie a AskApache.com, che ha fornito la motivazione e la configurazione dettagli originali per fare questo in un contesto di produzione.)
II. Creare file di __utm.gif
Questa è solo un'immagine trasparente di 1x1 pixel gif, che verrà posto nella directory del sito (non importa dove, ha solo bisogno di corrispondere alla posizione recitati nelle vostre pagine)
III. Accedi al __utm.gif Richieste
Per un protocollo di test in cui sei l'origine dell'attività lato client (ad esempio, desideri verificare la fedeltà cross-browser di un codice di monitoraggio eventi che hai aggiunto a una pagina sul tuo sito, in modo da automatizzare 5000 click sul pulsante che hai appena cablato, servendo la pagina dal tuo server dev impostato per questo scopo) è probabilmente più semplice per solo registrare le intestazioni di richiesta, perché è in quelle intestazioni che lo script GA indirizza il client a raccogliere vari dati dal DOM, dalla barra degli indirizzi (url) e dalle intestazioni HTTP precedenti e li aggiunge a una richiesta di una risorsa sul server GA (__utm.gif, che è solo un 1x1 pixel trasparente).
Per questo tipo di protocollo, utilizzo l'addon di Firefox, LiveHTTPHeaders. Lo si installa come qualsiasi altro addon di Firefox, pochi clic del mouse è tutto. Quindi, aprilo e fai clic sulla scheda "Generatore". Da questa finestra è possibile visualizzare le richieste effettive in tempo reale. Nella parte inferiore della finestra c'è un pulsante 'salva' per memorizzare il registro. Trovo più semplice configurare LiveHTTPHeaders per registrare solo le richieste __utm.gif; per fare ciò, basta fare clic sulla scheda "Modifica" e creare un semplice filtro per escludere tutto tranne queste particolari immagini gif (usando le caselle di controllo a destra e la grande casella di testo a destra).
Altri tipi di protocolli di test richiedono l'utilizzo dei registri delle attività del server; in questo caso è sufficiente aggiungere questa riga a ogni pagina del tuo sito, appena sotto __trackPageview():
pageTracker._setLocalRemoteServerMode();
IV. Analizza le richieste registrate così puoi leggerle effettivamente
Così ora il tuo log conterrà le singole linee di transcription, ognuna delle quali è una stringa aggiunta ad una richiesta HTTP per il pixel di tracciamento GA. Questa stringa è solo una concatenazione di coppie chiave-valore, ogni chiave inizia con le lettere "utm" (probabilmente per "urchin tracker"). Ognuno di questi parametri corrisponde a una variabile che vedi in GA Dashboard (qui c'è un complete list e una descrizione di essi). Questo è tutto ciò che devi sapere per creare un parser.Più in dettaglio:
In primo luogo, ecco un sterilizzata __utm.gif richiesta (le voci nella tua livehttpheaders log):
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
Questo è il mio parser (in 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)))
Il risultato è il seguente:
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
Per evitare di fare questo più a lungo, ho omesso il valore dei cookie. Ovviamente richiedono un passo di analisi separato, sebbene sia praticamente identico al passaggio che ho appena mostrato. Ancora una volta, ogni richiesta rappresenta una singola transazione, quindi è possibile memorizzarle a proprio piacimento.
Doug, grazie per un post così dettagliato! Sicuramente darò una prova e informarti dei miei progressi la prossima settimana. Forse vuoi creare un progetto google e posso contribuire a sviluppare una suite che altri possono usare? –
Buona idea, Salman. Io uso GibHub, quindi lo metterò la settimana prossima e ti farò sapere quando lo faccio e dove trovarlo. – doug
@doug ha fatto questo su Github? Mi piacerebbe vederlo se lo facesse ... – s6mike