基本访问模式是给我 zone Z 在分钟 M 的所有日志,其中分钟 M 指日志条目写入 Cloudflare 日志聚合系统磁盘的时间。
首先,可尝试每分钟运行一次查询。若响应过小,可提高到 5 分钟,这对大多数 zone 都适用。若响应过大,可尝试缩短到 15 秒。
若你的 zone 日志量很大,读取 1 分钟日志所需时间超过 1 分钟,可错开运行 2 个 worker,每个 worker 每 2 分钟请求 1 分钟的日志。
只要响应代码为 200 且读取响应正文时无错误,API 返回的数据在重复调用时不会改变。响应中消息的顺序可能不同,但对于给定查询,消息的数量和内容始终相同。
由于我们的日志处理系统以批次方式摄取数据,大多数每分钟请求少于 100 万的 zone 会有“空”分钟。对此类分钟的查询会返回状态为 200 但正文无数据的响应。这并不表示该分钟内没有请求经 Cloudflare 代理,只表示我们的系统在该分钟内未处理该 zone 的日志批次。
logs/received API 端点按接收时间公开数据,即事件写入 Cloudflare Logs 聚合系统磁盘的时间。
按日志聚合时间而非日志生成时间排序,可降低(加快)日志管道延迟,并实现确定性的日志拉取。功能上,这类似于 tail 日志文件或从 rsyslog 读取(尽管是分块的)。
这意味着,要获取给定时间范围的日志,你可以为每个连续分钟(或其他时间范围)各发起一次调用。由于日志行按接收时间分批并提供,不存在迟到数据。给定分钟的响应永远不会改变。你无需反复轮询某个时间范围,以等待日志在我们的聚合系统中收敛。
Logpull API 以 NDJSON 格式返回数据,即每一行日志都是有效的 JSON 对象。Google BigQuery 和 AWS Kinesis 等主要分析工具需要此格式。
要将得到的日志数据转换为每个数组元素对应一行日志的 JSON 数组,可以使用 jq 工具。本质上,你使用 slurp(或简写 s)标志将 API 响应通过管道传给 jq:
<API request data> | jq -s
有关获取和安装 jq 的更多信息,请参阅 Download jq ↗。
以下是包含默认字段的示例日志:
{
"ClientIP": "89.163.242.206",
"ClientRequestHost": "www.theburritobot.com",
"ClientRequestMethod": "GET",
"ClientRequestURI": "/static/img/testimonial-hipster.png",
"EdgeEndTimestamp": 1506702504461999900,
"EdgeResponseBytes": 69045,
"EdgeResponseStatus": 200,
"EdgeStartTimestamp": 1506702504433000200,
"RayID": "3a6050bcbe121a87"
}你可以查询从过去 1 分钟起(相对于你发起查询的实际时间)至少 3 天、最长 7 天的日志。如需更长时间,我们建议使用 Logpush。