概述
Cloudflare Logpush 可将 HTTP 请求日志导出到 Amazon S3 等目标端。将这些日志转发到 ClickStack 后,您可以:
- 结合其他可观测性数据分析边缘流量、缓存性能和安全事件
- 使用 ClickHouse SQL 查询日志
- 将日志保留时间延长至超出 Cloudflare 的默认保留期限
本指南使用 ClickPipes 持续将 Cloudflare 日志文件从 S3 摄取到 ClickHouse。S3 在 Cloudflare 与 ClickHouse 之间充当持久缓冲层,提供精确一次语义和重放能力。
与现有 Cloudflare Logpush 集成
本节假定你已将 Cloudflare Logpush 配置为将日志导出到 S3。否则,请先参考 Cloudflare 的 AWS S3 设置指南。
前置条件
- ClickHouse Cloud 服务已在运行 (ClickPipes 是 Cloud 独有功能,在 ClickStack OSS 中不可用)
- Cloudflare Logpush 正在持续将日志写入 S3 存储桶
- Cloudflare 写入日志所在的 S3 存储桶 名称和区域
配置 S3 身份验证
ClickPipes 需要具备从您的 S3 bucket 读取数据的权限。请按照安全访问 S3 数据指南,配置基于 IAM 角色的访问或基于凭证的访问。
有关 ClickPipes S3 身份验证和权限的完整详细信息,请参阅 S3 ClickPipes 参考文档。
创建 ClickPipes 作业
- ClickHouse Cloud 控制台 → 数据源 → 创建 ClickPipe
- 源:Amazon S3

连接:
- S3 文件路径:您的 Cloudflare 日志存储桶路径,并使用通配符匹配文件。如果您在 Logpush 中启用了按日分的子文件夹,请使用
**以匹配跨子目录的文件:- 无子文件夹:
https://your-bucket.s3.us-east-1.amazonaws.com/logs/* - 按日分的子文件夹:
https://your-bucket.s3.us-east-1.amazonaws.com/logs/**/*
- 无子文件夹:
- 身份验证:选择您的身份验证方法,并提供相应的凭据或 IAM Role ARN
摄取设置:
点击 传入数据,然后配置:
- 打开 持续摄取
- 排序:词典序

Cloudflare Logpush 使用基于日期的命名方式写入文件 (例如 20250127/...) ,天然符合词典序。ClickPipes 每 30 秒轮询一次新文件,并摄取所有名称大于上一个已处理文件的文件。
schema 映射:
点击 解析信息。ClickPipes 会对您的日志文件进行采样,并自动检测 schema。请检查映射后的列,并根据需要调整类型。为目标表定义一个 排序键——对于 Cloudflare 日志,一个不错的选择是 (EdgeStartTimestamp, ClientCountry, EdgeResponseStatus)。

点击 完成设置。
配置 HyperDX 数据源
ClickPipes 会将 Cloudflare 日志摄取到一张扁平化表中,并使用 Cloudflare 的原生字段名。要在 HyperDX 中查看这些日志,请配置一个自定义数据源,将 Cloudflare 的列映射到 HyperDX 的日志视图。
- 打开 HyperDX → Team Settings → Sources

- 点击 Add source 并按以下内容进行配置。点击 Configure Optional Fields 可查看所有字段:

| 设置 | 值 |
|---|---|
| 名称 | Cloudflare Logs |
| 源数据类型 | 日志 |
| 数据库 | default |
| 表 | cloudflare_http_logs |
| 时间戳列 | toDateTime(EdgeStartTimestamp / 1000000000) |
| 默认选择 | EdgeStartTimestamp, ClientRequestMethod, ClientRequestURI, EdgeResponseStatus, ClientCountry |
| 服务名称表达式 | 'cloudflare' |
| 日志级别表达式 | multiIf(EdgeResponseStatus >= 500, 'ERROR', EdgeResponseStatus >= 400, 'WARN', 'INFO') |
| Body 表达式 | concat(ClientRequestMethod, ' ', ClientRequestURI, ' ', toString(EdgeResponseStatus)) |
| 日志属性表达式 | map('http.method', ClientRequestMethod, 'http.status_code', toString(EdgeResponseStatus), 'http.url', ClientRequestURI, 'client.country', ClientCountry, 'client.ip', ClientIP, 'cache.status', CacheCacheStatus, 'bot.score', toString(BotScore), 'cloudflare.ray_id', RayID, 'cloudflare.colo', EdgeColoCode) |
| 资源属性表达式 | map('cloudflare.zone', ClientRequestHost) |
| 隐式列表达式 | concat(ClientRequestMethod, ' ', ClientRequestURI) |
- 点击 Save Source

这样就能将 Cloudflare 的原生列直接映射到 HyperDX 的日志查看器中,无需进行任何数据转换或重复存储。Body 会显示类似 GET /api/v1/users 200 的请求摘要,同时所有 Cloudflare 字段都可作为可搜索属性使用。
在 HyperDX 中验证数据
前往 搜索视图,然后选择 Cloudflare 日志 数据源。将时间范围设置为覆盖你的数据所在时间段。你应该会看到包含以下内容的日志条目:
- Body 列中的请求摘要 (例如
GET /api/v1/users 200) - 按 HTTP 状态码以不同颜色显示的严重级别 (2xx 为 INFO,4xx 为 WARN,5xx 为 ERROR)
- 可搜索的属性,例如
http.status_code、client.country、cache.status和bot.score


演示数据集
对于想要在配置生产环境 Cloudflare Logpush 之前先测试集成的用户,我们提供了一个包含逼真 HTTP 请求日志的演示数据集。
使用演示数据集启动 ClickPipes
- ClickHouse Cloud 控制台 → 数据源 → Create ClickPipe
- Source: Amazon S3
- 身份验证: Public
- S3 file path:
https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/cloudflare/cloudflare-http-logs.json - 点击 Incoming data
- 选择 JSON 作为 format
- 点击 Parse information 并检查检测到的 schema
- 将 Table name 设置为
cloudflare_http_logs - 点击 Complete Setup
该数据集包含 5,000 条跨越 24 小时的 HTTP 请求日志,模式贴近真实场景,包括来自多个国家/地区的流量、缓存命中与未命中、API 和静态资源请求、错误响应以及安全事件。
配置 HyperDX 数据源
按照数据源配置步骤创建一个指向 cloudflare_http_logs 表的 HyperDX 数据源。如果你已在生产集成部分配置过该数据源,则无需执行此步骤。
验证演示数据
SELECT count() FROM cloudflare_http_logs;
-- 应返回 5000在 HyperDX 中进入 Search 视图,选择 Cloudflare 日志 数据源,并将时间范围设置为 2026-02-23 00:00:00 - 2026-02-26 00:00:00。
你应当能看到包含请求摘要、可搜索的 Cloudflare attribute,以及基于 HTTP 状态码的严重性级别的日志条目。


仪表盘与可视化
故障排查
数据未出现在 ClickHouse 中
请确认该表已创建且包含数据:
SHOW TABLES FROM default LIKE 'cloudflare_http_logs';
SELECT count() FROM cloudflare_http_logs;如果该表存在但为空,请前往 ClickPipes 检查是否有错误:ClickHouse Cloud 控制台 → 数据源 → 您的 ClickPipe → 日志。如需排查私有存储桶的身份验证问题,请参阅 S3 ClickPipes 访问控制文档。
HyperDX 中未显示日志
如果数据已写入 ClickHouse,但在 HyperDX 中看不到,请检查数据源配置:
- 确认在 HyperDX → 团队设置 → 数据源 中已存在
cloudflare_http_logs对应的数据源 - 确保 时间戳列 设置为
toDateTime(EdgeStartTimestamp / 1000000000)——Cloudflare 的时间戳以纳秒为单位,需要先转换 - 确认 HyperDX 中选择的时间范围覆盖了这些数据。对于演示数据集,请使用 2026-02-23 00:00:00 - 2026-02-26 00:00:00
后续步骤
生产环境部署
本指南演示如何使用公开的演示数据集摄取 Cloudflare 日志。对于生产环境部署,请将 Cloudflare Logpush 配置为写入您自己的 S3 存储桶,并通过 基于 IAM role 的身份验证 配置 ClickPipes 以确保安全访问。仅选择所需的 Logpush 字段,以降低存储成本和摄取量。在 Logpush 中启用按日分组的子文件夹,以便更好地组织文件,并在 ClickPipes 路径模式中使用 **/* 以匹配各级子目录中的文件。
有关高级配置选项 (包括用于处理回填和乱序文件的基于 SQS 的无序摄取) ,请参阅 S3 ClickPipes 文档。


