Docs
搜索文档...⌘K

Amazon CloudFront

Amazon CloudFront 可以将其访问日志投递到 Amazon Data Firehose 数据流,而 Firehose 可通过 HTTPS 将日志转发至 Ahrefs。你需要在自己的 AWS 账户中通过 AWS 控制台创建该数据流并启用日志投递;Ahrefs 无需访问你的账户。

前提条件

  • 一个为你的 Ahrefs 项目域名提供服务的 CloudFront 分配。
  • 在该 AWS 账户中拥有创建 Firehose 数据流、S3 存储桶和 IAM 角色的权限,并可编辑该分配的日志记录设置。
  • Firehose 数据流必须创建在 **美国东部(北弗吉尼亚) ** us-east-1 区域。无论你的源站位于哪个区域,CloudFront 都只会将标准版日志投递到该区域内的 Firehose 数据流。

第 1 步 — 获取你的端点 URL 和访问密钥

  1. 在 Ahrefs 中,进入你项目的 项目设置 → Bot Analytics。
  2. 选择 Amazon CloudFront。
  3. 复制页面上显示的 HTTP 端点 URL 和 访问密钥。访问密钥用于标识你的项目;请像对待密码一样妥善保管。

端点 URL 对所有人都一样:

https://analytics.ahrefs.com/api/aws_firehose/logs

第 2 步 — 创建 Firehose 数据流

在 AWS 控制台中,切换到 **美国东部(北弗吉尼亚) ** 区域,打开 Amazon Data Firehose 并点击 创建 Firehose 数据流。

选择源和目标

将 源 设为 直接 PUT,将 目标 设为 HTTP 端点,然后为数据流命名,例如 ahrefs-bot-analytics。数据流创建后,源和目标无法更改。保持 转换记录 部分不变。

创建 Firehose 数据流:源为直接 PUT,目标为 HTTP 端点,数据流名称为 ahrefs-bot-analytics

目标设置

  • HTTP 端点名称:Ahrefs Bot Analytics
  • HTTP 端点 URL:第 1 步中的 URL
  • 身份验证:选择 使用访问密钥,并将第 1 步的访问密钥粘贴到 访问密钥 中
  • 内容编码:GZIP
  • 重试时长:300 秒
  • 参数:留空
  • 缓冲提示:保持默认值
Firehose 目标设置:Ahrefs 端点 URL、访问密钥认证、GZIP 内容编码、重试 300 秒

warning

访问密钥是将该数据流与你的 Ahrefs 项目关联起来的唯一凭证。每个 Ahrefs 项目都需要一个独立的 Firehose 数据流,并使用各自的访问密钥;为同一项目提供服务的多个分配可以共用一个数据流。

备份设置

在 Amazon S3 中的源记录备份 下选择 仅失败数据,然后点击 浏览 选择现有的 S3 存储桶,或点击 创建 新建一个。 Firehose 会将 Ahrefs 无法接收的任何批次及其原因写入该位置,因此排查问题时首先应查看此存储桶。

Firehose 备份设置:仅失败数据,S3 备份存储桶

高级设置

展开 高级设置,将 Amazon CloudWatch 错误日志记录 设为 已启用,并在 权限 下让控制台创建新的 IAM 角色。点击 创建 Firehose 数据流,并等待数据流状态变为 活动。

第 3 步 — 将 CloudFront 日志发送到数据流

  1. 在 CloudFront 控制台中,打开 分配 并选择你的分配。
  2. 在 日志记录 标签页中,找到 标准版日志目标,点击 添加。
  3. 在 添加访问日志目标 页面,将 传送到 设为 Amazon Kinesis Data Firehose,并在 目标数据流 下选择你的数据流。
  4. 展开 其他设置:
    • 字段选择:选择 日志字段 下列出的字段。保持选中全部 33 个字段也可以。
    • 输出格式:JSON。不接受其他格式。
  5. 点击 提交。 CloudFront 会在几分钟内应用日志记录更改。
CloudFront:添加访问日志目标并投递到 Amazon Kinesis Data Firehose,选择数据流,选择字段并将输出格式设为 JSON

日志字段

Ahrefs 需要时间戳、c-ip、x-host-header、cs-uri-stem 和 cs(User-Agent)。建议选择如下:

timestamp(ms) date time c-ip x-forwarded-for cs-method x-host-header cs-protocol
cs-protocol-version cs-uri-stem cs-uri-query cs(User-Agent) cs(Referer) sc-status sc-bytes
sc-content-type time-to-first-byte time-taken x-edge-result-type x-edge-request-id
x-edge-location c-country asn

timestamp(ms)、c-country 和 asn 位于字段选择器的实时子集里。它们是可选的:如果没有 timestamp(ms),Ahrefs 会改用 date 和 time,精度为 1 秒。

第 4 步 — 验证

CloudFront 会分批投递标准版日志,通常在请求发生后一小时内送达;而在你启用日志记录约四小时后,投递会变得稳定可靠。随后,Firehose 会在其缓冲区间隔内转发每个批次。

  • 在 Firehose 控制台中,当 CloudFront 开始投递后,数据流的 监控 选项卡会显示 IncomingRecords;当 Ahrefs 接收这些批次后,会显示 DeliveryToHttpEndpoint.Success。
  • 在 Ahrefs 中,随着机器人访问你的网站,Bot Analytics 报告会逐步填充数据。

故障排除

如果投递失败,Firehose 会在重试时长内进行重试;之后会将该批次写入你的备份存储桶,路径前缀为 http-endpoint-failed/,并附上 Ahrefs 返回的错误信息。相同的信息也会出现在该数据流的 目标错误日志 选项卡中。

错误信息原因
missing authentication headerFirehose 目标中的访问密钥字段为空。
invalid authentication该访问密钥与任何 Ahrefs 项目都不匹配。请从第 1 步重新复制一次。
records are not JSON: configure CloudFront standard logging (v2) with output format JSON投递的输出格式不是 JSON,或者该数据流接收的是 CloudFront 实时日志。仅支持 JSON 格式的标准版日志。
响应 …必须包含 “content-type: application/json” 标头 … 404端点 URL 拼写有误。请与第 1 步中的 URL 进行对比。

禁用

  1. 在 CloudFront 控制台中,进入该分配的 日志记录 选项卡,选择 Firehose 目标并将其删除。这会停止日志投递。
  2. 删除 Firehose 数据流;如果你不再需要备份存储桶,也可以一并删除。
  3. 在 Ahrefs 中,在 项目设置 → Bot Analytics 里禁用 Amazon CloudFront。

删除该目标后,分配的投递源仍会保留在 CloudWatch Logs 中。这不会造成影响;如果你再次启用日志记录,它会被重复使用。

info

不支持 CloudFront 实时日志(通过 Kinesis Data Streams 投递)。请按上述说明使用标准版日志记录(v2),并将输出设为 JSON。