跳转到内容
本站为社区维护的非官方中文翻译,与 Cloudflare, Inc. 无关联。本站不提供账户登录,请勿在任何非官方站点输入您的 Cloudflare 账户信息。官方文档:developers.cloudflare.com

日志搜索

最后更新 查看 MarkdownAgent 设置

Log Explorer(旧版)使你能够直接在 Cloudflare 仪表板或 API 中存储和探索 Cloudflare 日志,从而无需将日志转发给第三方服务即可了解日志内容。日志使用 R2 对象存储平台存储在 Cloudflare 的全球网络上,并可以通过仪表板或 SQL API 进行查询。

何时使用 Log Explorer

需要调查真实生产流量中实际发生的情况时,请使用 Log Explorer:

  • 分析历史数据和趋势
  • 在安全事件发生后进行调查
  • 在数千个请求中搜索模式
  • 随时间监测应用程序性能
  • 向支持团队提供取证证据

需要测试模拟请求将发生什么时,请使用 Rules simulator;它在仪表板中显示为 Rule simulator:

  • 了解规则为何未按预期触发
  • 测试规则如何处理不同的请求场景
  • 查看规则的评估顺序
  • 模拟来自不同地理位置或条件的请求

核心区别在于:Log Explorer 显示实际流量,而 Cloudflare Trace 显示模拟的“假设”场景。这两者都不同于 Cloudflare Traces,后者记录真实请求如何经过 Cloudflare。

使用 Log Explorer

你可以通过 Cloudflare 仪表板或 API 过滤和查看日志。

  1. 在 Cloudflare 仪表板中,前往 Observability > Logs。

    前往 Logs(日志) ↗
  2. 打开数据集选择器,选择一个 Log Explorer 数据集,例如 HTTP requests(HTTP 请求)。对于 zone 范围的数据集,选择单个域名或全部域名。

  3. 选择预设或自定义时间范围。

  4. 通过选择字段、运算符和值来添加过滤器。若要改写 SQL,请选择 Open SQL editor(打开 SQL 编辑器),针对所选数据集输入查询,然后选择 Run query(运行查询)。

SQL 查询仅适用于 Log Explorer 数据集。有关过滤器查询语言、函数和键盘快捷键,请参阅 Logs 页面上的内置参考或日志概览。

例如,要使用特定的 Ray ID 查找 HTTP 请求,请打开 SQL 编辑器并输入以下 SQL 查询:

SELECT
    clientRequestScheme,
    clientRequestHost,
    clientRequestMethod,
    edgeResponseStatus,
    clientRequestUserAgent
FROM http_requests
WHERE RayID = '806c30a3cec56817'
LIMIT 1

作为另一个示例,要在特定时间段内查找具有所选列的 Cloudflare Access 请求,你可以执行以下 SQL 查询:

SELECT
    CreatedAt,
    AppDomain,
    AppUUID,
    Action,
    Allowed,
    Country,
    RayID,
    Email,
    IPAddress,
    UserUID
FROM access_requests
WHERE Date >= '2025-02-06' AND Date <= '2025-02-06' AND CreatedAt >= '2025-02-06T12:28:39Z' AND CreatedAt <= '2025-02-06T12:58:39Z'

要查询请求标头、响应标头和 Cookie,你必须首先使用自定义字段为这些字段启用日志记录。使用 API 或仪表板配置自定义字段列表;无需修改 Logpush 作业本身。

下面的示例展示了如何按日期、时间戳、客户端国家/地区和自定义请求标头来查询 HTTP 请求。请确保提前记录你计划查询的特定标头或 Cookie。

SELECT clientip, clientrequesthost, clientrequestmethod, edgeendtimestamp, edgestarttimestamp, rayid, clientcountry, requestheaders
FROM http_requests
WHERE Date >= '2025-07-17'
  AND Date <= '2025-07-17'
  AND edgeendtimestamp >= '2025-07-17T07:54:19Z'
  AND edgeendtimestamp <= '2025-07-18T07:54:19Z'
  AND clientcountry = 'us'
  AND requestheaders."x-test-header" like '%654AM%';

保存查询

构建查询后,可以通过选择 Save search(保存搜索) 将其保存。提供名称和描述,以便日后识别。要查看已保存的搜索,选择 Saved searches(已保存搜索)。在之前的 Log Search 页面中保存的查询会作为已保存搜索出现在 Logs 页面上。

与安全分析 (Security Analytics) 的集成

你也可以直接从安全分析仪表板打开 Log Search。执行此操作时,你在安全分析中应用的过滤器将自动带到查询中。

优化你的查询

所有 Log Explorer 数据集都包含一个名为 date 的特殊列,该列有助于缩小为响应查询而扫描的数据量,从而缩短查询响应时间。date 的值必须采用 YYYY-MM-DD 格式。例如,要查询 2023 年 10 月 12 日发生的日志,请在 WHERE 子句中添加以下内容:date = '2023-10-12'。该列支持 <、> 和 = 等标准运算符。

  1. 登录到 Cloudflare 仪表板 ↗ 并选择你的账户。
  2. 前往 Observability > Logs,选择一个 Log Explorer 数据集,然后选择 Open SQL editor(打开 SQL 编辑器)。
  3. 输入以下 SQL 查询:
SELECT
    clientip,
    clientrequesthost,
    clientrequestmethod,
    clientrequesturi,
    edgeendtimestamp,
    edgeresponsestatus,
    originresponsestatus,
    edgestarttimestamp,
    rayid,
    clientcountry,
    clientrequestpath,
    date
FROM
    http_requests
WHERE
    date = '2023-10-12' LIMIT 500

额外的查询优化技巧

  • 缩小查询时间范围。专注于更小的时间窗口,以减少处理的数据量。这有助于避免查询过量的数据并加快响应速度。
  • 省略 ORDER BY 和 LIMIT 子句。这些子句会减慢查询速度,在处理大型数据集时尤为明显。对于返回大量记录的查询,请缩短时间范围,而不是在更宽的时间范围内限制最新的 N 条记录。
  • 仅选择必需的列。例如,将 SELECT * 替换为你需要的特定列列表。你也可以将 SELECT RayId 作为第一步迭代,然后通过过滤 Ray ID 的查询来检索其他列。此外,你可以使用 SELECT COUNT(*) 来探测具有匹配记录的时间范围,而无需检索完整的数据集。

这篇文档对您有帮助吗?