摘要本指南介绍如何使用 ClickPipes 将 Cloudflare 日志摄取到 ClickStack。Cloudflare Logpush 会将日志写入 S3,而 ClickPipes 会持续将新文件摄取到 ClickHouse。不同于大多数通过 OpenTelemetry Collector 实现的 ClickStack 集成指南,本指南使用 ClickPipes 直接从 S3 拉取数据。如果你想在配置生产环境摄取之前先查看仪表盘,可使用演示数据集。
概述
- 结合其他可观测性数据分析边缘流量、缓存性能和安全事件
- 使用 ClickHouse SQL 查询日志
- 将日志保留时间延长至超出 Cloudflare 的默认保留期限
替代方案:直接通过 HTTP 摄取Cloudflare Logpush 也支持将日志直接推送到 HTTP 端点。由于 Cloudflare 将日志导出为以换行分隔的 JSON (NDJSON) ,而 ClickHouse 可通过 将
JSONEachRow 原生接收这种格式,因此您可以使用以下端点 URL 格式,将 Logpush 直接指向您的 ClickHouse Cloud HTTP 接口:YOUR_CLICKHOUSE_HOST 替换为您的 ClickHouse Cloud 主机名,将 BASE64_CREDENTIALS 替换为经过 Base64 编码的凭据 (echo -n 'default:YOUR_PASSWORD' | base64) 。这种方式设置起来更简单 (无需配置 S3、SQS 或 IAM) ,但如果传输失败,Cloudflare Logpush 无法回填历史数据——因此,如果 ClickHouse 在推送期间不可用,这些日志将永久丢失。与现有 Cloudflare Logpush 集成
前置条件
- 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
- 打开 持续摄取
- 排序:词典序
20250127/...) ,天然符合词典序。ClickPipes 每 30 秒轮询一次新文件,并摄取所有名称大于上一个已处理文件的文件。schema 映射:点击 解析信息。ClickPipes 会对您的日志文件进行采样,并自动检测 schema。请检查映射后的列,并根据需要调整类型。为目标表定义一个 排序键——对于 Cloudflare 日志,一个不错的选择是 (EdgeStartTimestamp, ClientCountry, EdgeResponseStatus)。点击 完成设置。首次创建时,ClickPipes 会先对指定路径中的所有现有文件执行初始加载,然后再切换到持续轮询。如果您的存储桶中积压了大量 Cloudflare 日志,此初始加载可能需要一些时间。
配置 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
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
演示数据集
使用演示数据集创建 ClickPipe
- 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
验证演示数据
时区显示HyperDX 会按浏览器的本地时区显示时间戳。演示数据覆盖 2026-02-24 00:00:00 - 2026-02-25 00:00:00 (UTC)。较大的时间范围可确保无论你身处何地都能看到演示日志。看到日志后,你可以将范围缩小到 24 小时,以获得更清晰的可视化效果。
仪表盘与可视化
仪表盘配置
查看仪表盘
对于演示数据集,请将时间范围设置为 2026-02-24 00:00:00 - 2026-02-25 00:00:00 (UTC) (请根据您的本地时区调整) 。导入后的仪表盘默认不会指定时间范围。
故障排查
数据未出现在 ClickHouse 中
HyperDX 中未显示日志
- 确认在 HyperDX → 团队设置 → 数据源 中已存在
cloudflare_http_logs对应的数据源 - 确保 时间戳列 设置为
toDateTime(EdgeStartTimestamp / 1000000000)——Cloudflare 的时间戳以纳秒为单位,需要先转换 - 确认 HyperDX 中选择的时间范围覆盖了这些数据。对于演示数据集,请使用 2026-02-23 00:00:00 - 2026-02-26 00:00:00
后续步骤
生产环境配置
**/* 来匹配各级子目录中的文件。
有关高级配置选项 (包括用于处理历史回填和乱序文件的 基于 SQS 的无序摄取) ,请参阅 S3 ClickPipes 文档。