Fastly
O streaming de logs em tempo real da Fastly pode enviar os logs de solicitações do seu serviço para a Ahrefs via HTTPS. Você adiciona um endpoint de logs ao seu serviço da Fastly no painel de controle da Fastly; a Ahrefs nunca precisa acessar sua conta da Fastly.
Pré-requisitos
- Um serviço de CDN da Fastly que atende ao domínio do seu projeto da Ahrefs. Qualquer plano da Fastly funciona, inclusive o nível gratuito.
- Permissão para editar a configuração desse serviço e ativar uma nova versão.
Etapa 1 — Obtenha sua chave de acesso
- Na Ahrefs, acesse Configurações do projeto → Bot Analytics do seu projeto.
- Selecione Fastly.
- Copie a URL, o nome do cabeçalho personalizado e o valor do cabeçalho personalizado. O valor do cabeçalho é a sua chave de acesso: ela identifica o seu projeto, então trate-a como uma senha.
Todo o resto de que você precisa está nesta página.
Etapa 2 — Adicione o endpoint de logs
No painel de controle da Fastly, abra seu serviço, clique em Editar configuração e clone a versão ativa. No menu à esquerda, escolha Logs, depois HTTPS e Criar endpoint.
Campos do endpoint
| Campo | Valor |
|---|---|
| Nome | Ahrefs Bot Analytics |
| Posicionamento | Padrão da versão do formato |
| Formato do log | O formato do log abaixo, substituindo o padrão |
| URL | https://analytics.ahrefs.com/api/fastly/logs |
| Máximo de logs, Máximo de bytes | Deixe em branco |
| Tipo de conteúdo | application/json |
| Nome do cabeçalho personalizado | X-Ahrefs-Web-Analytics-Property |
| Valor do cabeçalho personalizado | A chave de acesso da Etapa 1 |
| Método | POST |
| Formato da entrada de log em JSON | Delimitado por nova linha. Array de JSON também funciona. |
| Compressão | Gzip (recomendado) ou nenhuma. Zstd e Snappy não são aceitos. |
| Campos de TLS | Deixe em branco |
Em Opções avançadas, defina Selecionar um formato de linha de log como Em branco. Clique em Criar e depois Ativar a nova versão. A Fastly começa a transmitir imediatamente.
warning
O formato da linha de log deve ser Em branco. O padrão, Clássico, adiciona um cabeçalho syslog ao início de cada linha, e a Ahrefs rejeita esses lotes.
info
Quando você salva o endpoint, a Fastly verifica se o host de destino aceita logs de serviços da Fastly. A Ahrefs responde a essa verificação para todos, então não há nada para configurar do seu lado.
Formato do log
A Fastly preenche os placeholders %{...}V em todas as solicitações. Você decide o que compartilhar: o formato mínimo é suficiente para o Bot Analytics funcionar; o formato recomendado oferece resultados melhores. Chaves desconhecidas são ignoradas, então você pode manter campos extras que já registra em log.
Mínimo. Visitas de bots com horário, página e nome do 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"
}
Recomendado. Adiciona o IP do visitante para dados de localização, o status e os detalhes de resposta exibidos em cada visita, a verificação do Web Bot Auth e o marcador de edge que remove duplicatas quando seu serviço usa 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"
}
Misture os dois como quiser: as quatro chaves mínimas são obrigatórias; qualquer outra chave pode ser omitida, deixada vazia ou definida como (null). Mantenha fastly_is_edge sempre que seu serviço tiver um shield; caso contrário, cada miss será contado duas vezes. As chaves sem aspas (timestamp, response_status, response_body_size, fastly_is_edge) devem sempre ter um valor, ou a linha não é um JSON válido.
info
Os serviços Fastly Compute gravam o mesmo JSON a partir do código, um objeto por linha, com as configurações de endpoint da Etapa 2.
Etapa 3 — Verificar
A Fastly entrega logs em pequenos lotes, geralmente em até um minuto após as solicitações. As visitas de bots aparecem então no relatório do Bot Analytics alguns minutos depois. As solicitações de navegadores também são enviadas; a Ahrefs descarta tudo o que não é bot.
Solução de problemas
A Fastly não mostra erros de entrega para endpoints HTTPS no painel de controle; portanto, verifique as configurações com base na tabela acima quando nada chegar. A Ahrefs responde a cada lote com um destes:
| Resposta | Causa |
|---|---|
401 missing authentication header | O nome do cabeçalho personalizado está escrito incorretamente ou está vazio. |
403 invalid authentication | O valor do cabeçalho personalizado não corresponde a um projeto da Ahrefs. Copie-a novamente da Etapa 1. |
400 record 0: … | O formato da linha de log é Clássico em vez de Em branco, a compactação não está definida como Gzip nem está desativada, ou o formato de log não é JSON válido. |
400 record N: Missing record field … | Delimitado por quebras de linha: o formato de log não tem uma das chaves obrigatórias. |
400 invalid body: not a JSON array of log records: … | Array de JSON: o formato da linha de log é Clássico em vez de Em branco, o formato de log não tem uma chave obrigatória ou não é JSON válido. |
400 body is not valid gzip | A compactação está como Gzip na Fastly, mas não foi possível descompactar o corpo. |