Fastly
Streaming log real-time Fastly dapat mengirim log permintaan layanan Anda ke Ahrefs melalui HTTPS. Anda menambahkan titik akhir logging ke layanan Fastly Anda dari panel kontrol Fastly; Ahrefs tidak pernah memerlukan akses ke akun Fastly Anda.
Prasyarat
- Layanan CDN Fastly yang melayani domain proyek Ahrefs Anda. Paket Fastly apa pun bisa digunakan, termasuk tingkat gratis.
- Izin untuk mengedit konfigurasi layanan tersebut dan mengaktifkan versi baru.
Langkah 1 — Dapatkan kunci akses Anda
- Di Ahrefs, buka Pengaturan Proyek → Bot Analytics untuk proyek Anda.
- Pilih Fastly.
- Salin URL, nama header kustom, dan nilai header kustom. Nilai header adalah kunci akses Anda: nilai ini mengidentifikasi proyek Anda, jadi perlakukan seperti kata sandi.
Semua hal lain yang Anda butuhkan ada di halaman ini.
Langkah 2 — Tambahkan titik akhir logging
Di panel kontrol Fastly, buka layanan Anda, klik Edit konfigurasi, lalu gandakan versi aktif. Di menu sebelah kiri, pilih Pencatatan log, lalu HTTPS dan Buat titik akhir.
Kolom titik akhir
| Bidang | Nilai |
|---|---|
| Nama | Ahrefs Bot Analytics |
| Penempatan | Default versi format |
| Format log | Format log di bawah ini, menggantikan format default |
| URL | https://analytics.ahrefs.com/api/fastly/logs |
| Log maksimum, Byte maksimum | Biarkan kosong |
| Jenis konten | application/json |
| Nama header kustom | X-Ahrefs-Web-Analytics-Property |
| Nilai header kustom | Kunci akses dari Langkah 1 |
| Metode | POST |
| Format entri log JSON | Dipisahkan dengan baris baru. Array JSON juga bisa digunakan. |
| Kompresi | Gzip (disarankan) atau tanpa kompresi. Zstd dan Snappy tidak diterima. |
| Kolom TLS | Biarkan kosong |
Di bagian Opsi Advanced, atur Pilih format baris log ke Kosong. Klik Buat, lalu Aktifkan versi baru. Fastly langsung mulai streaming.
warning
Format baris log harus Kosong. Pengaturan default, Klasik, menambahkan header syslog di awal setiap baris, dan Ahrefs menolak batch tersebut.
info
Saat Anda menyimpan titik akhir, Fastly memastikan host tujuan menerima log dari layanan Fastly. Ahrefs menanggapi pemeriksaan itu untuk semua orang, jadi tidak ada yang perlu dikonfigurasi di sisi Anda.
Format log
Fastly mengisi placeholder %{...}V untuk setiap permintaan. Anda yang menentukan apa yang akan dibagikan: format minimal sudah cukup agar Bot Analytics berfungsi, sedangkan format yang direkomendasikan memberikan hasil yang lebih baik. Kunci yang tidak dikenali akan diabaikan, jadi Anda bisa mempertahankan kolom tambahan yang sudah Anda catat dalam log.
Minimal. Kunjungan bot dengan waktu, halaman, dan nama 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"
}
Direkomendasikan. Menambahkan IP pengunjung untuk data lokasi, status dan detail respons yang ditampilkan pada setiap kunjungan, verifikasi Web Bot Auth, serta penanda edge yang menghapus duplikasi saat layanan Anda menggunakan 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"
}
Campurkan keduanya sesuai kebutuhan: empat kunci minimal wajib ada, semua kunci lainnya boleh dihilangkan, dikosongkan, atau berisi (null). Pertahankan fastly_is_edge setiap kali layanan Anda memiliki shield; kalau tidak, setiap miss akan dihitung dua kali. Kunci tanpa tanda kutip (timestamp, response_status, response_body_size, fastly_is_edge) harus selalu memiliki nilai; jika tidak, baris tersebut bukan JSON yang valid.
info
Layanan Fastly Compute menulis JSON yang sama dari kode, satu objek per baris, dengan pengaturan titik akhir dari Langkah 2.
Langkah 3 — Verifikasi
Fastly mengirimkan log dalam batch kecil, biasanya dalam waktu satu menit setelah permintaan. Kunjungan bot kemudian muncul di laporan Bot Analytics beberapa menit kemudian. Permintaan dari browser juga dikirim; Ahrefs membuang semua yang bukan bot.
Pemecahan masalah
Fastly tidak menampilkan kesalahan pengiriman untuk titik akhir HTTPS di panel kontrol, jadi periksa pengaturan terhadap tabel di atas jika tidak ada yang masuk. Ahrefs membalas setiap batch dengan salah satu dari berikut ini:
| Respons | Penyebab |
|---|---|
401 missing authentication header | Nama header kustom salah eja atau kosong. |
403 invalid authentication | Nilai header kustom tidak cocok dengan proyek Ahrefs. Salin lagi dari Langkah 1. |
400 record 0: … | Format baris log adalah Klasik, bukan Kosong, kompresinya bukan Gzip atau tidak ada, atau format log bukan JSON yang valid. |
400 record N: Missing record field … | Dipisahkan dengan baris baru: format log tidak memiliki salah satu kunci yang wajib. |
400 invalid body: not a JSON array of log records: … | Array JSON: format baris log adalah Klasik, bukan Kosong, format log tidak memiliki kunci yang wajib, atau format tersebut bukan JSON yang valid. |
400 body is not valid gzip | Kompresi di Fastly adalah Gzip, tetapi isi tidak dapat didekompresi. |