Fastly
Lo streaming dei log in tempo reale di Fastly può inviare ad Ahrefs, tramite HTTPS, i log delle richieste del tuo servizio. Aggiungi un endpoint di logging al tuo servizio Fastly dal pannello di controllo di Fastly; Ahrefs non ha mai bisogno di accedere al tuo account Fastly.
Prerequisiti
- Un servizio CDN Fastly che serve il dominio del tuo progetto Ahrefs. Qualsiasi piano Fastly va bene, incluso il livello gratuito.
- Autorizzazione a modificare la configurazione di quel servizio e ad attivare una nuova versione.
Passaggio 1 — Ottieni la tua chiave di accesso
- In Ahrefs, vai su Impostazioni progetto → Bot Analytics per il tuo progetto.
- Seleziona Fastly.
- Copia l’URL, il nome dell’header personalizzato e il valore dell’header personalizzato. Il valore dell’header è la tua chiave di accesso: identifica il tuo progetto, quindi trattalo come una password.
Tutto il resto di cui hai bisogno è in questa pagina.
Passaggio 2 — Aggiungi l’endpoint di logging
Nel pannello di controllo Fastly, apri il tuo servizio, fai clic su Modifica configurazione e clona la versione attiva. Nel menu a sinistra scegli Log, poi HTTPS e Crea endpoint.
Campi dell’endpoint
| Campo | Valore |
|---|---|
| Nome | Bot Analytics di Ahrefs |
| Collocazione | Predefinito per la versione del formato |
| Formato del log | Il formato del log qui sotto, sostituendo quello predefinito |
| URL | https://analytics.ahrefs.com/api/fastly/logs |
| Numero massimo di log, Numero massimo di byte | Lascia vuoto |
| Tipo di contenuto | application/json |
| Nome dell’intestazione personalizzata | X-Ahrefs-Web-Analytics-Property |
| Valore dell’intestazione personalizzata | La chiave di accesso del passaggio 1 |
| Metodo | POST |
| Formato della voce di log JSON | Delimitato da newline. Va bene anche un array JSON. |
| Compressione | Gzip (consigliato) o nessuna. Zstd e Snappy non sono accettati. |
| Campi TLS | Lascia vuoto |
In Advanced options, imposta Seleziona un formato della riga di log su Vuoto. Fai clic su Crea, poi Attiva la nuova versione. Fastly inizia a trasmettere subito.
warning
Il formato della riga di log deve essere Vuoto. L’impostazione predefinita, Classico, antepone un’intestazione syslog a ogni riga e Ahrefs rifiuta questi batch.
info
Quando salvi l’endpoint, Fastly verifica che l’host di destinazione accetti i log dai servizi Fastly. Ahrefs risponde a quella verifica per tutti, quindi non c’è nulla da configurare da parte tua.
Formato del log
Fastly compila i segnaposto %{...}V per ogni richiesta. Decidi tu cosa condividere: il formato minimo è sufficiente perché Bot Analytics funzioni, mentre il formato consigliato offre risultati migliori. Le chiavi sconosciute vengono ignorate, quindi puoi mantenere i campi aggiuntivi che già registri nei log.
Minimo. Visite dei bot con ora, pagina e nome del bot:
{
"timestamp": %{time.start.msec}V,
"host": "%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V",
"url": "%{json.escape(req.url)}V",
"request_user_agent": "%{json.escape(req.http.User-Agent)}V"
}
Consigliato. Aggiunge l’IP del visitatore per i dati di posizione, lo stato e i dettagli della risposta mostrati con ogni visita, la verifica di Web Bot Auth e il marcatore edge che rimuove i duplicati quando il tuo servizio usa lo shielding:
{
"timestamp": %{time.start.msec}V,
"client_ip": "%{req.http.Fastly-Client-IP}V",
"host": "%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V",
"scheme": "%{req.protocol}V",
"url": "%{json.escape(req.url)}V",
"request_method": "%{json.escape(req.method)}V",
"request_referer": "%{json.escape(req.http.Referer)}V",
"request_user_agent": "%{json.escape(req.http.User-Agent)}V",
"response_state": "%{json.escape(fastly_info.state)}V",
"response_status": %{resp.status}V,
"response_body_size": %{resp.body_bytes_written}V,
"response_content_type": "%{json.escape(resp.http.Content-Type)}V",
"fastly_server": "%{json.escape(server.identity)}V",
"fastly_is_edge": %{if(fastly.ff.visits_this_service == 0, "true", "false")}V,
"request_id": "%{json.escape(req.xid)}V",
"signature": "%{json.escape(req.http.Signature)}V",
"signature_input": "%{json.escape(req.http.Signature-Input)}V",
"signature_agent": "%{json.escape(req.http.Signature-Agent)}V"
}
Combina i due formati come preferisci: le quattro chiavi minime sono obbligatorie, tutte le altre possono essere omesse, vuote o (null). Mantieni fastly_is_edge ogni volta che il tuo servizio ha uno shield, altrimenti ogni miss viene conteggiato due volte. Le chiavi non racchiuse tra virgolette (timestamp, response_status, response_body_size, fastly_is_edge) devono sempre avere un valore, altrimenti la riga non è JSON valido.
info
I servizi Fastly Compute scrivono lo stesso JSON dal codice, un oggetto per riga, con le impostazioni dell’endpoint del passaggio 2.
Passaggio 3 — Verifica
Fastly consegna i log in piccoli batch, di solito entro un minuto dalle richieste. Le visite dei bot vengono poi visualizzate nel report Bot Analytics pochi minuti dopo. Vengono inviate anche le richieste dei browser; Ahrefs elimina tutto ciò che non è un bot.
Risoluzione dei problemi
Fastly non mostra gli errori di consegna per gli endpoint HTTPS nel pannello di controllo, quindi confronta le impostazioni con la tabella sopra quando non arriva nulla. Ahrefs risponde a ogni batch con uno di questi:
| Risposta | Causa |
|---|---|
401 missing authentication header | Il nome dell’header personalizzato è scritto in modo errato oppure è vuoto. |
403 invalid authentication | Il valore dell’header personalizzato non corrisponde a un progetto Ahrefs. Copiala di nuovo dal passaggio 1. |
400 record 0: … | Il formato della riga di log è Classico invece di Vuoto, la compressione non è Gzip né assente oppure il formato del log non è JSON valido. |
400 record N: Missing record field … | Delimitato da nuove righe: nel formato del log manca una delle chiavi richieste. |
400 invalid body: not a JSON array of log records: … | Array di JSON: il formato della riga di log è Classico invece di Vuoto, nel formato del log manca una chiave richiesta oppure non è JSON valido. |
400 body is not valid gzip | La compressione in Fastly è Gzip, ma non è stato possibile decomprimere il corpo. |