Docs
문서 검색...⌘K

Fastly

Fastly의 실시간 로그 스트리밍은 서비스의 요청 로그를 HTTPS를 통해 Ahrefs로 전송할 수 있습니다. Fastly 제어판에서 Fastly 서비스에 로깅 엔드포인트를 추가하면 되며, Ahrefs는 Fastly 계정에 접근할 필요가 없습니다.

사전 준비 사항

  • Ahrefs 프로젝트의 도메인을 서비스하는 Fastly CDN 서비스 무료 티어를 포함해 어떤 Fastly 요금제든 사용 가능합니다.
  • 해당 서비스의 구성 설정을 편집하고 새 버전을 활성화할 수 있는 권한.

1단계 — 액세스 키 받기

  1. Ahrefs에서 해당 프로젝트의 프로젝트 설정 → 봇 애널리틱스로 이동합니다.
  2. Fastly를 선택합니다.
  3. URL, 사용자 지정 헤더 이름, 사용자 지정 헤더 값을 복사하세요. 헤더 값은 액세스 키입니다. 프로젝트를 식별하는 정보이므로 비밀번호처럼 취급하세요.

나머지 필요한 모든 것은 이 페이지에 있습니다.

2단계 — 로깅 엔드포인트 추가

Fastly 제어판에서 서비스를 열고 구성 편집을 클릭한 다음 활성 버전을 복제합니다. 왼쪽 메뉴에서 로깅을 선택한 다음 HTTPS와 엔드포인트 생성을 선택합니다.

엔드포인트 필드

필드값
이름Ahrefs 봇 애널리틱스
배치형식 버전 기본값
로그 형식기본값을 대체하여 아래의 로그 형식을 사용합니다.
URLhttps://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 플레이스홀더를 채워 넣습니다. 무엇을 공유할지는 사용자가 결정합니다. 최소 형식만으로도 봇 애널리틱스가 동작하며, 권장 형식은 더 나은 결과를 제공합니다. 알 수 없는 키는 무시되므로, 이미 로깅 중인 추가 필드는 그대로 유지해도 됩니다.

최소. 시간, 페이지, 봇 이름이 포함된 봇 방문:

{
  "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 검증, 그리고 서비스에서 실딩(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"
}

두 형식을 원하는 대로 섞어 사용하세요. 최소 4개 키는 필수이며, 그 외 키는 생략하거나 비워 두거나 (null)로 둘 수 있습니다. 서비스에 실드가 있는 경우에는 fastly_is_edge를 유지하세요. 그렇지 않으면 미스가 각각 두 번 집계됩니다. 따옴표 없는 키(timestamp, response_status, response_body_size, fastly_is_edge)는 항상 값이 있어야 하며, 값이 없으면 해당 줄은 유효한 JSON이 아닙니다.

info

Fastly Compute 서비스는 2단계의 엔드포인트 설정을 사용해 코드에서 동일한 JSON을 작성하며, 한 줄에 객체 하나씩 기록합니다.

3단계 — 확인

Fastly는 로그를 소규모 배치로 전달하며, 보통 요청 후 1분 이내에 도착합니다. 그런 다음 봇 방문은 몇 분 뒤 봇 애널리틱스 보고서에 표시됩니다. 브라우저에서 발생한 요청도 전송되지만, Ahrefs는 봇이 아닌 모든 항목을 폐기합니다.

문제 해결

Fastly는 제어판에서 HTTPS 엔드포인트의 전송 오류를 표시하지 않으므로, 아무것도 도착하지 않으면 위 표와 비교하여 설정을 확인하세요. Ahrefs는 각 배치에 대해 다음 중 하나로 응답합니다.

응답원인
401 missing authentication header커스텀 헤더 이름이 잘못 입력되었거나 비어 있습니다.
403 invalid authentication커스텀 헤더 값이 Ahrefs 프로젝트와 일치하지 않습니다. 1단계에서 다시 복사하세요.
400 record 0: …로그 줄 형식이 비어 있음이 아니라 클래식이거나, 압축이 Gzip 또는 없음으로 설정되어 있지 않거나, 로그 형식이 유효한 JSON이 아닙니다.
400 record N: Missing record field …줄바꿈 구분: 로그 형식에 필수 키 중 하나가 없습니다.
400 invalid body: not a JSON array of log records: …JSON 배열: 로그 줄 형식이 비어 있음이 아니라 클래식이거나, 로그 형식에 필수 키가 없거나, 유효한 JSON이 아닙니다.
400 body is not valid gzipFastly에서 압축이 Gzip으로 설정되어 있지만, 본문을 압축 해제할 수 없습니다.