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 和访问密钥
- 在 Ahrefs 中,进入你项目的 项目设置 → Bot Analytics。
- 选择 Amazon CloudFront。
- 复制页面上显示的 HTTP 端点 URL 和 访问密钥。访问密钥用于标识你的项目;请像对待密码一样妥善保管。
端点 URL 对所有人都一样:
https://analytics.ahrefs.com/api/aws_firehose/logs
第 2 步 — 创建 Firehose 数据流
在 AWS 控制台中,切换到 **美国东部(北弗吉尼亚) ** 区域,打开 Amazon Data Firehose 并点击 创建 Firehose 数据流。
选择源和目标
将 源 设为 直接 PUT,将 目标 设为 HTTP 端点,然后为数据流命名,例如 ahrefs-bot-analytics。数据流创建后,源和目标无法更改。保持 转换记录 部分不变。
目标设置
- HTTP 端点名称:
Ahrefs Bot Analytics - HTTP 端点 URL:第 1 步中的 URL
- 身份验证:选择 使用访问密钥,并将第 1 步的访问密钥粘贴到 访问密钥 中
- 内容编码:GZIP
- 重试时长:
300秒 - 参数:留空
- 缓冲提示:保持默认值
warning
访问密钥是将该数据流与你的 Ahrefs 项目关联起来的唯一凭证。每个 Ahrefs 项目都需要一个独立的 Firehose 数据流,并使用各自的访问密钥;为同一项目提供服务的多个分配可以共用一个数据流。
备份设置
在 Amazon S3 中的源记录备份 下选择 仅失败数据,然后点击 浏览 选择现有的 S3 存储桶,或点击 创建 新建一个。 Firehose 会将 Ahrefs 无法接收的任何批次及其原因写入该位置,因此排查问题时首先应查看此存储桶。
高级设置
展开 高级设置,将 Amazon CloudWatch 错误日志记录 设为 已启用,并在 权限 下让控制台创建新的 IAM 角色。点击 创建 Firehose 数据流,并等待数据流状态变为 活动。
第 3 步 — 将 CloudFront 日志发送到数据流
- 在 CloudFront 控制台中,打开 分配 并选择你的分配。
- 在 日志记录 标签页中,找到 标准版日志目标,点击 添加。
- 在 添加访问日志目标 页面,将 传送到 设为 Amazon Kinesis Data Firehose,并在 目标数据流 下选择你的数据流。
- 展开 其他设置:
- 字段选择:选择 日志字段 下列出的字段。保持选中全部 33 个字段也可以。
- 输出格式:JSON。不接受其他格式。
- 点击 提交。 CloudFront 会在几分钟内应用日志记录更改。
日志字段
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 header | Firehose 目标中的访问密钥字段为空。 |
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 进行对比。 |
禁用
- 在 CloudFront 控制台中,进入该分配的 日志记录 选项卡,选择 Firehose 目标并将其删除。这会停止日志投递。
- 删除 Firehose 数据流;如果你不再需要备份存储桶,也可以一并删除。
- 在 Ahrefs 中,在 项目设置 → Bot Analytics 里禁用 Amazon CloudFront。
删除该目标后,分配的投递源仍会保留在 CloudWatch Logs 中。这不会造成影响;如果你再次启用日志记录,它会被重复使用。
info
不支持 CloudFront 实时日志(通过 Kinesis Data Streams 投递)。请按上述说明使用标准版日志记录(v2),并将输出设为 JSON。