Docs
Пошук документації...⌘K

Fastly

Потокова передача журналів у реальному часі в Fastly може надсилати журнали запитів вашого сервісу до Ahrefs через HTTPS. Ви додаєте кінцеву точку журналювання до свого сервісу Fastly з панелі керування Fastly; Ahrefs ніколи не потребує доступу до вашого облікового запису Fastly.

Передумови

  • Сервіс Fastly CDN, що обслуговує домен вашого проєкту Ahrefs. Підійде будь-який тарифний план Fastly, включно з безкоштовним.
  • Дозвіл редагувати конфігурацію цього сервісу та активувати нову версію.

Крок 1 — Отримайте ключ доступу

  1. В Ahrefs перейдіть у Налаштування проєкту → Bot Analytics для вашого проєкту.
  2. Оберіть Fastly.
  3. Скопіюйте URL, назву користувацького заголовка та значення користувацького заголовка. Значення заголовка — це ваш ключ доступу: він ідентифікує ваш проєкт, тож ставтеся до нього як до пароля.

Усе інше, що вам потрібно, є на цій сторінці.

Крок 2 — Додайте кінцеву точку логування

У панелі керування Fastly відкрийте свій сервіс, натисніть Редагувати конфігурацію і клонуйте активну версію. У лівому меню виберіть Логування, потім HTTPS і Створити кінцеву точку.

Поля кінцевої точки

ПолеЗначення
Ім’яBot Analytics від Ahrefs
РозміщенняВерсія формату за замовчуванням
Формат логуНаведений нижче формат логу замість стандартного
URL-адресаhttps://analytics.ahrefs.com/api/fastly/logs
Максимальна кількість логів, Максимальна кількість байтівЗалиште порожнім
Тип контентуapplication/json
Назва користувацького заголовкаX-Ahrefs-Web-Analytics-Property
Значення користувацького заголовкаКлюч доступу з кроку 1
МетодPOST
Формат запису логу у JSONЗ розділенням символом нового рядка. Масив JSON також підійде.
СтисненняGzip (рекомендовано) або без стиснення. Zstd і Snappy не приймаються.
Поля TLSЗалиште порожнім

У розділі Додаткові параметри установіть для Виберіть формат рядка логу значення Порожній. Натисніть Створити, а потім Активувати нову версію. Fastly одразу починає потокову передачу.

warning

Формат рядка логу має мати значення Порожній. Варіант за замовчуванням — Класичний — додає syslog-заголовок на початок кожного рядка, і Ahrefs відхиляє такі пакети.

info

Коли ви зберігаєте кінцеву точку, Fastly перевіряє, чи хост призначення приймає логи від сервісів Fastly. Ahrefs відповідає на цю перевірку для всіх, тож з вашого боку нічого налаштовувати не потрібно.

Формат логу

Fastly підставляє значення в заповнювачі %{...}V для кожного запиту. Ви вирішуєте, чим ділитися: мінімального формату достатньо, щоб Bot Analytics працював, а рекомендований формат дає кращі результати. Невідомі ключі ігноруються, тож ви можете залишити додаткові поля, які вже записуєте в логах.

Мінімальний. Візити ботів із часом, сторінкою та назвою бота:

{
  "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"
}

Рекомендований. Додає IP відвідувача для даних про місцезнаходження, статус і деталі відповіді, які показуються для кожного візиту, верифікацію Web Bot Auth та маркер edge, що прибирає дублікати, коли ваш сервіс використовує 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"
}

Комбінуйте ці два варіанти як завгодно: чотири мінімальні ключі обов’язкові, а будь-який інший ключ можна опустити, лишити порожнім або (null). Залишайте fastly_is_edge, якщо для вашого сервісу налаштовано екранування, інакше кожен промах зараховується двічі. Ключі без лапок (timestamp, response_status, response_body_size, fastly_is_edge) завжди мають мати значення, інакше рядок не є валідним JSON.

info

Сервіси Fastly Compute записують той самий JSON із коду — по одному об’єкту на рядок — з налаштуваннями кінцевої точки з кроку 2.

Крок 3 — перевірка

Fastly доставляє логи невеликими пакетами, зазвичай протягом хвилини після запитів. Після цього відвідування ботів з’являються у звіті Bot Analytics через кілька хвилин. Запити від браузерів також надсилаються; Ahrefs відкидає все, що не є ботом.

Усунення несправностей

Fastly не показує помилки доставки для кінцевих точок HTTPS у панелі керування, тож якщо нічого не надходить, звірте налаштування з таблицею вище. Ahrefs відповідає на кожен пакет одним із таких повідомлень:

ВідповідьПричина
401 missing authentication headerНазву користувацького заголовка написано з помилкою або її не вказано.
403 invalid authenticationЗначення користувацького заголовка не відповідає жодному проєкту Ahrefs. Скопіюйте його ще раз із Кроку 1.
400 record 0: …Формат рядка логів — Classic замість Blank, стиснення — не Gzip і не варіант «без стиснення», або формат логів не є валідним JSON.
400 record N: Missing record field …З розділенням за новими рядками: у форматі логів бракує одного з обов’язкових ключів.
400 invalid body: not a JSON array of log records: …Масив JSON: формат рядка логів — Classic замість Blank, у форматі логів бракує обов’язкового ключа або він не є валідним JSON.
400 body is not valid gzipУ Fastly стиснення — Gzip, але тіло не вдалося розпакувати.