跳转到内容
搜索文档

Logs Engine

最后更新 查看 MarkdownAgent 设置

Logs Engine 使你能够将日志存储在 R2 中并直接查询。

在 R2 中存储日志

  • 设置 Logpush to R2 作业。
  • 创建至少具有 R2 读取权限的 R2 access key。
  • 确保你具有 Logshare 读取权限。
  • 或者,创建具有以下权限的 Cloudflare API token:
    • 账户范围
    • Logs 读取权限

查询日志

你可以使用 API 按时间范围或 RayID 查询并下载日志。

认证

所有 API 调用都需要以下请求头:

  • X-Auth-Email - 与域名关联的 Cloudflare 账户电子邮件地址
  • X-Auth-Key - Cloudflare API key

或者,也可以使用具有 Logs 编辑权限的 API token 进行认证:

  • Authorization: Bearer <API_TOKEN>

必需请求头

除上述必需的认证请求头外,API 访问你的 R2 存储桶中的日志还需要以下请求头。

列出文件

使用端点 GET /accounts/{accountId}/logs/list,列出与提供的查询参数匹配、包含日志的相关 R2 对象。

查询参数

  • start(必需)string (TimestampRFC3339) - RFC 3339 格式的开始时间,例如 start=2022-06-06T16:00:00Z。

  • end(必需)string (TimestampRFC3339) - RFC 3339 格式的结束时间,例如 end=2022-06-06T16:00:00Z。

  • bucket(必需)string (Bucket) - R2 存储桶名称,例如 bucket=cloudflare-logs。

  • prefix string (Prefix) - 日志存储所用的 R2 存储桶前缀,例如 prefix=http_requests/example.com/{DATE}。

  • limit number (Limit) - 返回结果的最大数量,例如 limit=100。

按时间范围检索日志

使用端点 GET /accounts/{accountId}/logs/retrieve,流式传输与提供的查询参数匹配、存储在 R2 中的日志。

查询参数

  • start(必需)string (TimestampRFC3339) - RFC 3339 格式的开始时间,例如 start=2022-06-06T16:00:00Z

  • end(必需)string (TimestampRFC3339) - RFC 3339 格式的结束时间,例如 end=2022-06-06T16:00:00Z

  • bucket(必需)string (Bucket) - R2 存储桶名称,例如 bucket=cloudflare-logs

  • prefix string (Prefix) - 日志存储所用的 R2 存储桶前缀,例如 prefix=http_requests/example.com/{DATE}

示例 API 请求

curl --globoff "https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/retrieve?start=2022-06-01T16:00:00Z&end=2022-06-01T16:05:00Z&bucket=cloudflare-logs&prefix=http_requests/example.com/{DATE}" \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>" \
--header "R2-Access-Key-Id: R2_ACCESS_KEY_ID" \
--header "R2-Secret-Access-Key: R2_SECRET_ACCESS_KEY"

可以使用 > logs.json 将结果输出到文件。

此外,如果希望接收未经客户端透明解压的原始 GZIP 字节,请包含请求头 --header "Accept-Encoding: gzip"。

​按 Ray ID 检索日志

使用存储在 R2 中的日志,Logpull RayID Lookup 功能允许你在已建立索引的时间范围内查询是否存在某个 RayID,并返回匹配结果。此功能面向拥有 Logpull RayID Lookup Beta 订阅的用户。

查找 RayID 是一个两步流程。首先需要对时间范围建立索引,然后才能按 RayID 请求记录。

索引在七天未使用后会自动过期。

为时间范围建立索引

在执行查询之前,你可以指定希望建立索引的时间范围,以缩小查询范围。在以下示例中,我们对 R2 存储桶 "cloudflare-logs" 中前缀 "http_requests/{DATE}" 下存储的一分钟日志建立索引。

示例 API 请求

curl https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/rayids/index \
--header "Authorization: Bearer <API_TOKEN>" \
--header "R2-Access-Key-Id: <R2_ACCESS_KEY_ID>" \
--header "R2-Secret-Access-Key: <R2_SECRET_ACCESS_KEY>" \
--header "Content-Type: application/json" \
--data-raw '{
  "start": "2022-08-16T20:30:00Z",
  "end": "2022-08-16T20:31:00",
  "bucket": "cloudflare-logs",
  "prefix": "http_requests/example.com/{DATE}"
}'

查找 RayID

为时间范围建立索引后,使用 RayID 发起 GET 请求。如果在已建立索引的时间范围内找到匹配结果,将返回该记录。请注意,参数已从请求体移至 URL。需要使用 -g 标志,以避免 cURL 错误解析 {DATE} 参数。

示例 API 请求

curl --globoff "https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/rayids/<RAY_ID>?bucket=cloudflare-logs&prefix=http_requests/example.com/{DATE}" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "R2-Access-Key-Id: <R2_ACCESS_KEY_ID>" \
--header "R2-Secret-Access-Key: <R2_SECRET_ACCESS_KEY>"

故障排除

访问 API 时出错

  • 错误:时间范围返回的结果过多。请缩小时间范围后重试。

如果 start 与 end 参数之间的时间范围过宽,将返回 HTTP 状态代码 422。若遇到此限制,请尝试查询更短的时间范围。

  • 错误:所提供的 token 未启用所需功能。

请联系你的客户代表,将 Beta 版 Logpull RayID Lookup 订阅添加到你的账户。

  • 错误:时间范围返回的结果过多。请缩小时间范围后重试。

高流量 zone 可能在 R2 中生成大量日志文件。请缩小 start 与 end 时间范围,直到找到最适合你日志量的时长。

如何知道应为哪个时间范围建立索引?

目前尚无在日志到达时自动建立索引的流程。如果你有 RayID 并知道请求发生的时间,可尝试对请求完成后接下来的 5–10 分钟日志建立索引。

事件发生后到可查询之间的延迟是多少?

Logpush 会尽快以批处理方式投递日志,通常不到一分钟。此后即可使用 Logs Engine 访问日志。

R2 是否有保留策略控制?

R2 目前没有内置的保留策略控制。你可以向前查询到创建 Logpush 作业的时间。

Logs Engine 兼容哪些数据集?

检索 API 与我们支持的所有数据集兼容。完整列表请参阅 Datasets 部分。

这篇文档对您有帮助吗?