Fastly
Strumieniowanie logów w czasie rzeczywistym w Fastly może wysyłać logi żądań Twojej usługi do Ahrefs przez HTTPS. Dodajesz punkt końcowy do rejestrowania w usłudze Fastly z poziomu panelu sterowania Fastly; Ahrefs nigdy nie potrzebuje dostępu do Twojego konta Fastly.
Wymagania wstępne
- Usługa CDN Fastly obsługująca domenę Twojego projektu Ahrefs. Działa każdy plan Fastly, w tym bezpłatny.
- Uprawnienia do edytowania konfiguracji tej usługi i aktywowania nowej wersji.
Krok 1 — uzyskaj klucz dostępu
- W Ahrefs przejdź do Ustawienia projektu → Bot Analytics dla swojego projektu.
- Wybierz Fastly.
- Skopiuj URL, nazwę nagłówka niestandardowego oraz wartość nagłówka niestandardowego. Wartość nagłówka to twój klucz dostępu: identyfikuje twój projekt, więc traktuj ją jak hasło.
Wszystko, czego potrzebujesz, jest na tej stronie.
Krok 2 — dodaj punkt końcowy logów
W panelu sterowania Fastly otwórz swoją usługę, kliknij Edytuj konfigurację i sklonuj aktywną wersję. W menu po lewej wybierz Rejestrowanie, następnie HTTPS i Utwórz punkt końcowy.
Pola punktu końcowego
| Pole | Wartość |
|---|---|
| Nazwa | Ahrefs Bot Analytics |
| Umiejscowienie | Domyślna wersja formatu |
| Format logów | Poniższy format logów, zastępujący domyślny |
| Adres URL | https://analytics.ahrefs.com/api/fastly/logs |
| Maksymalna liczba logów, Maksymalna liczba bajtów | Pozostaw puste |
| Typ treści | application/json |
| Nazwa nagłówka niestandardowego | X-Ahrefs-Web-Analytics-Property |
| Wartość nagłówka niestandardowego | Klucz dostępu z kroku 1 |
| Metoda | POST |
| Format wpisu logu w JSON | Rozdzielany znakami nowej linii. Tablica JSON też zadziała. |
| Kompresja | Gzip (zalecane) lub brak. Zstd i Snappy nie są akceptowane. |
| Pola TLS | Pozostaw puste |
W sekcji Opcje Advanced ustaw opcję Wybierz format linii logu na Puste. Kliknij Utwórz, a następnie Aktywuj nową wersję. Fastly zacznie przesyłać strumieniowo od razu.
warning
Format linii logu musi mieć wartość Puste. Domyślny format Klasyczny dodaje nagłówek syslog na początku każdej linii, a Ahrefs odrzuca takie partie.
info
Podczas zapisywania punktu końcowego Fastly sprawdza, czy host docelowy akceptuje logi z usług Fastly. Ahrefs odpowiada na tę weryfikację dla wszystkich, więc po Twojej stronie nie trzeba nic konfigurować.
Format logów
Fastly uzupełnia symbole zastępcze %{...}V dla każdego żądania. Ty decydujesz, co udostępniasz: minimalny format wystarczy, aby Bot Analytics działało, a zalecany format daje lepsze wyniki. Nieznane klucze są ignorowane, więc możesz zachować dodatkowe pola, które już logujesz.
Minimalny. Wizyty botów z czasem, stroną i nazwą bota:
{
"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"
}
Zalecany. Dodaje adres IP odwiedzającego na potrzeby danych o lokalizacji, status i szczegóły odpowiedzi wyświetlane przy każdej wizycie, weryfikację Web Bot Auth oraz znacznik edge, który usuwa duplikaty, gdy Twoja usługa używa shieldingu:
{
"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"
}
Możesz je dowolnie łączyć: cztery minimalne klucze są wymagane, a każdy inny klucz można pominąć, pozostawić pusty lub ustawić na (null). Zachowaj fastly_is_edge, gdy usługa ma włączoną osłonę; w przeciwnym razie każde nietrafienie zostanie policzone dwukrotnie. Klucze bez cudzysłowów (timestamp, response_status, response_body_size, fastly_is_edge) muszą zawsze mieć wartość; w przeciwnym razie wiersz nie jest poprawnym JSON-em.
info
Usługi Fastly Compute zapisują ten sam JSON z poziomu kodu: jeden obiekt na wiersz, z ustawieniami punktu końcowego z kroku 2.
Krok 3 — zweryfikuj
Fastly dostarcza logi w małych partiach, zwykle w ciągu minuty od otrzymania żądań. Następnie wizyty botów pojawiają się kilka minut później w raporcie Bot Analytics. Żądania z przeglądarek też są wysyłane; Ahrefs odrzuca wszystko, co nie jest botem.
Rozwiązywanie problemów
Fastly nie pokazuje błędów dostarczania dla punktów końcowych HTTPS w panelu sterowania, więc jeśli nic nie dociera, porównaj ustawienia z powyższą tabelą. Ahrefs odpowiada na każdą partię jednym z poniższych komunikatów:
| Odpowiedź | Przyczyna |
|---|---|
401 missing authentication header | Niestandardowa nazwa nagłówka jest zapisana z błędem lub jest pusta. |
403 invalid authentication | Wartość niestandardowego nagłówka nie pasuje do żadnego projektu Ahrefs. Skopiuj go ponownie z kroku 1. |
400 record 0: … | Format wiersza logu jest ustawiony na Klasyczny zamiast Pusty, kompresja nie jest ustawiona na Gzip ani wyłączona albo format logu nie jest poprawnym JSON-em. |
400 record N: Missing record field … | Format rozdzielany znakami nowego wiersza: w formacie logu brakuje jednego z wymaganych kluczy. |
400 invalid body: not a JSON array of log records: … | Tablica JSON: format wiersza logu jest ustawiony na Klasyczny zamiast Pusty, w formacie logu brakuje wymaganego klucza albo format logu nie jest poprawnym JSON-em. |
400 body is not valid gzip | Kompresja w Fastly ma ustawioną wartość Gzip, ale nie udało się zdekompresować treści. |