Fastly
Потокова передача журналів у реальному часі в Fastly може надсилати журнали запитів вашого сервісу до Ahrefs через HTTPS. Ви додаєте кінцеву точку журналювання до свого сервісу Fastly з панелі керування Fastly; Ahrefs ніколи не потребує доступу до вашого облікового запису Fastly.
Передумови
- Сервіс Fastly CDN, що обслуговує домен вашого проєкту Ahrefs. Підійде будь-який тарифний план Fastly, включно з безкоштовним.
- Дозвіл редагувати конфігурацію цього сервісу та активувати нову версію.
Крок 1 — Отримайте ключ доступу
- В Ahrefs перейдіть у Налаштування проєкту → Bot Analytics для вашого проєкту.
- Оберіть Fastly.
- Скопіюйте 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, але тіло не вдалося розпакувати. |