Logs Engine 使你能够将日志存储在 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 存储桶中的日志还需要以下请求头。
R2-access-key-id(必需)- R2 Access Key IdR2-secret-access-key(必需)- R2 Secret Access Key
使用端点 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。 -
prefixstring (Prefix) - 日志存储所用的 R2 存储桶前缀,例如prefix=http_requests/example.com/{DATE}。 -
limitnumber (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 -
prefixstring (Prefix) - 日志存储所用的 R2 存储桶前缀,例如prefix=http_requests/example.com/{DATE}
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"。
使用存储在 R2 中的日志,Logpull RayID Lookup 功能允许你在已建立索引的时间范围内查询是否存在某个 RayID,并返回匹配结果。此功能面向拥有 Logpull RayID Lookup Beta 订阅的用户。
查找 RayID 是一个两步流程。首先需要对时间范围建立索引,然后才能按 RayID 请求记录。
索引在七天未使用后会自动过期。
在执行查询之前,你可以指定希望建立索引的时间范围,以缩小查询范围。在以下示例中,我们对 R2 存储桶 "cloudflare-logs" 中前缀 "http_requests/{DATE}" 下存储的一分钟日志建立索引。
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 发起 GET 请求。如果在已建立索引的时间范围内找到匹配结果,将返回该记录。请注意,参数已从请求体移至 URL。需要使用 -g 标志,以避免 cURL 错误解析 {DATE} 参数。
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 部分。