跳转到内容
搜索文档

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 时出错

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

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

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

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

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

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

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

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

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

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

R2 是否有保留策略控制?

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

Logs Engine 兼容哪些数据集?

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

这篇文档对您有帮助吗?