给我的博客添加监控板块:使用 Cloudflare API 获取网站流量信息

前言

如果你的博客网站配置了自定义域名并交由 Cloudflare 托管,那么你可以利用 Cloudflare 提供的 Analytics 服务和 GraphQL API 来获取网站的流量数据,包括请求数、独立访客(UV)、页面浏览量(PV)等。

本文将介绍三种获取网站流量数据的方式,从零门槛的 Cloudflare 控制台直接查看,到通过 API 编程获取,再到部署 Worker 为前端提供数据接口。


前置条件:你的域名已托管在 Cloudflare。以我的博客 lxpavilion.top 为例,详细配置步骤可参考:
为 GitHub Pages 博客配置自定义域名与 Cloudflare 加速


一、在 Cloudflare 控制台直接查看流量数据

如果你是初次接触 CF 数据分析,最直接的方式是在控制台查看流量概览。

进入域名管理的 Analytics 页面,可以看到多项数据面板。

Cloudflare Analytics 控制台概览,展示请求量、带宽、HTTP 状态码等核心指标的折线图面板和汇总卡片

在 Analytics 页面中,你还可以通过 Dashboards 功能自定义数据看板,自由组合所需的图表模块,也可以导入社区或官方预设的模板。

Dashboards 自定义看板编辑界面,展示添加/删除图表面板、选择数据维度和时间范围的配置项

这种方式无需编写任何代码,适合快速查看实时流量概况。


二、通过 GraphQL API 编程获取流量数据

控制台查看虽然方便,但如果你希望在前端页面上展示流量数据,或者需要定时采集与分析,就需要通过 API 来获取。

关于 CORS 限制:Cloudflare 的 GraphQL API 不允许浏览器端直接调用(存在 CORS 跨域限制),因此该方式仅适用于后端代码或服务器环境的 HTTP 请求。如果需要浏览器端访问,请参考第三部分的 Worker 方案。

2.1 获取 Zone ID 和 API Token

调用 API 需要两个核心凭证:

  • Zone ID:标识你的域名
  • API Token:用于身份验证的密钥

获取 Zone ID

在域名管理的 Overview 页面向下滚动,右侧信息栏中即可看到 Zone ID。

Cloudflare 域名 Overview 页面底部,右侧信息面板中 Zone ID 字段用框线标注说明

创建 API Token

点击右上角账户头像 -> My Profile -> API Tokens,进入 Token 管理页面。

API Tokens 管理页面入口,左侧侧边栏中高亮显示 API Tokens 菜单项

点击 Create Token,由于用途是获取网站流量数据,可以直接使用预设模板 Read analytics and logs

创建 API Token 页面,Read analytics and logs 模板卡片上标注了创建按钮的位置

创建完成后,在 Token 详情页面可以查看到该 Token 的权限范围——仅有读取权限,可以读取账户信息和网站流量数据,无法对资源做任何修改

Token 详情页面的权限列表,展示 Account Analytics Read 和 Zone Analytics Read 两项只读权限

2.2 Python 示例:获取近 7 天的流量数据

以下代码使用 Cloudflare GraphQL API 查询指定域名近 7 天的每日请求数、独立访客和页面浏览量。

import requests
from datetime import datetime, timedelta, timezone

# 安全警告:请勿将 API Token 和 Zone ID 硬编码在代码中!
# 若不慎泄露,他人可读取你的网站流量数据。
# 建议通过环境变量读取,或使用 .env 文件管理。
API_TOKEN = "cfut_YOUR_TOKEN_HERE"
ZONE_ID = "your_zone_id_here"

end = datetime.now(timezone.utc)
start = end - timedelta(days=7)

query = f"""
{{
  viewer {{
    zones(filter: {{zoneTag: "{ZONE_ID}"}}) {{
      httpRequests1dGroups(limit: 8, filter: {{date_geq: "{start:%Y-%m-%d}", date_leq: "{end:%Y-%m-%d}"}}) {{
        dimensions {{ date }}
        sum {{ requests pageViews }}
        uniq {{ uniques }}
      }}
    }}
  }}
}}
"""

resp = requests.post(
    "https://api.cloudflare.com/client/v4/graphql",
    headers={"Authorization": f"Bearer {API_TOKEN}"},
    json={"query": query}
)

# 解析返回数据
data = resp.json()["data"]["viewer"]["zones"][0]["httpRequests1dGroups"]
print("日期       请求数  访客  浏览量")
for day in data:
    d = day["dimensions"]["date"]
    req = day["sum"]["requests"]
    uv = day["uniq"]["uniques"]
    pv = day["sum"]["pageViews"]
    print(f"{d}  {req:6d}  {uv:4d}  {pv:5d}")

运行结果示例:

日期       请求数  访客  浏览量
2026-06-09    9830   190   1087
2026-06-10    4782   183    439

2.3 API 查询维度与时间范围说明

根据实际需求,你可以调整 GraphQL 查询语句来获取不同粒度的数据:

维度 最长回溯时间 说明
按天 (httpRequests1dGroups) 1 年 获取每日的请求数、访客数、带宽等,适合长期趋势分析
按小时 (httpRequests1hGroups) 3 天 获取每小时的细粒度数据,适合短期监控和异常排查
按国家/地区 1 天 获取请求的地理分布;如需一周的按国家统计,需要逐天连续请求后自行合并

官方文档参考Cloudflare GraphQL API 入门

实用小技巧:你可以将官方 API 文档链接喂给 AI 工具(如 Claude Code、ChatGPT 等),让 AI 帮你生成符合特定需求的查询代码,比自己从零翻阅文档效率更高。


三、部署 Cloudflare Worker 获取流量数据

上述 API 方式虽然直接,但受 CORS 策略限制无法在浏览器中调用。为了让前端页面也能展示流量数据,我们需要一个后端中间层——Cloudflare Workers

3.1 Worker 概述

Cloudflare Workers 是一个无服务器计算平台,你只需编写简单的 JavaScript 代码,Cloudflare 就会将其部署在全球 330+ 个边缘节点上。

简单来说,Worker 相当于一个运行在云端边缘节点的轻量后端服务,对外暴露 HTTP 接口,浏览器可以正常访问这些接口获取数据。

3.2 通过控制台创建 Worker

创建 Worker 实例

在 CF Dashboard 中,导航到 Build -> Compute -> Workers & Pages,点击 Create Worker

Workers and Pages 页面概览,展示已创建的 Worker 列表和创建按钮的位置

选择官方提供的 Hello World! 模板开始创建。

Worker 模板选择界面,Hello World 模板卡片被高亮框选

配置自定义域名

进入 Worker 详情页,导航到 Domains 选项卡,点击 Add Domain

Domains 配置页面,包含域名输入框、添加按钮和已绑定域名列表

注意:只能配置你已拥有域名的子域名。例如:helloworld.lxpavilion.top

验证 Worker

访问你配置的域名,如果 Worker 正常工作,浏览器会返回 Hello World! 的响应内容。

浏览器访问 helloworld.lxpavilion.top,页面正常显示 Hello World! 纯文本响应

如需返回实际的网站流量数据,只需在 Worker 代码中调用 Cloudflare GraphQL API(类似前文的 Python 逻辑),将数据以 JSON 格式响应给前端即可。


四、使用 Wrangler 本地构建 Worker

除了在控制台通过图形界面创建外,你还可以使用 Wrangler(Cloudflare 官方 CLI 工具)在本地开发、测试和部署 Worker。这种方式更适合需要版本管理和 CI/CD 集成的项目。

4.1 环境准备

确保电脑上已安装 Node.js(版本 >= 18),然后通过 npm 安装 Wrangler:

npm install -g wrangler

wrangler --version

终端中执行 npm install -g wrangler,安装过程日志输出,包含版本号和安装路径信息

终端执行 wrangler --version,显示当前安装的 Wrangler 版本号,如 3.xx.x

4.2 登录 Cloudflare 账号

wrangler login

执行命令后,终端会提示正在打开浏览器进行 OAuth 授权。

终端输出 wrangler login 的提示信息,显示正在启动浏览器进入 Cloudflare 授权页面

浏览器自动跳转到 Cloudflare 授权页面,点击 Authorize 即可完成登录。

浏览器中的 Cloudflare OAuth 授权确认页面,标注了 Authorize 按钮位置和授权范围说明

4.3 编写配置文件和 Worker 脚本

在项目目录下创建以下两个核心文件:

wrangler.json 配置文件

{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "test",
  "main": "main.js",
  "compatibility_date": "2026-06-10",
  "placement": {
    "mode": "smart"
  },
  "vars": {
    "var": "我是环境变量"
  }
}

各字段说明:

字段 作用
$schema JSON Schema 路径,用于 IDE 自动补全和校验(部署时无用)
name Worker 唯一名称,仪表盘中显示,也是默认子域名的一部分
main 入口文件路径(相对项目根目录)
compatibility_date API 行为版本,此日期前的行为保持兼容
placement.mode 智能放置,设为 smart 可让 CF 将 Worker 调度到离用户最近的节点
vars 普通环境变量;敏感信息(如 API Token)请使用 wrangler secret 单独加密存储

main.js 执行脚本

export default {
    async fetch(request, env) {
        const message = env.var || "未设置环境变量";
        return new Response(`环境变量的值是: ${message}`, {
            headers: { "Content-Type": "text/plain; charset=utf-8" }
        });
    }
};

4.4 部署 Worker

在项目目录下执行:

wrangler deploy

终端中执行 wrangler deploy 的完整输出,包含部署进度、生成的 Worker 名称和公网访问地址

部署成功后,在 Cloudflare Dashboard 的 Workers & Pages 页面可以看到新部署的 Worker 状态为 Active

Dashboard 中 Workers 列表页面,test Worker 显示 Active 运行状态和绑定的域名链接

后续配置自定义域名和验证测试的方法与第三节相同,此处不再赘述。


五、最终效果

配置好 Worker 并编写好获取流量数据的 JS 脚本后,前端就可以通过 fetch 请求 Worker 域名获取流量数据,并在页面上以图表形式呈现。

以下是我博客中监控板块的实际效果截图:

博客 Analytics 页面效果,展示近 7 天请求数、独立访客和页面浏览量的趋势折线图,下方数据表格同步显示

你可以访问 栏轩阁 - Analytics 查看实时效果。


六、总结与最佳实践

本文介绍了三种获取 Cloudflare 网站流量数据的方式,按技术门槛从低到高排列:

方式 适用场景 优点 缺点
控制台直接查看 快速概览、日常巡检 零代码、实时数据 无法自定义展示、无法嵌入前端
GraphQL API 编程获取 后端定时采集、数据分析 灵活、可自动化 有 CORS 限制,浏览器无法直接调用
Worker 部署为 API 中间层 前端展示流量数据 无 CORS 限制、全球加速、可缓存 需要编写和部署额外代码

最佳实践建议

  1. 安全第一:API Token 等敏感信息切勿硬编码,建议通过环境变量或 wrangler secret 管理
  2. 数据缓存:Worker 返回的数据可以设置合理的 Cache-Control 头部,减少 GraphQL API 的调用次数(每天查询 1-2 次即可满足展示需求)
  3. 可视化展示:前端推荐搭配图表库(如 ECharts、Chart.js、ApexCharts)将数据渲染为折线图或柱状图
  4. 架构推荐前端到 Worker(数据中间层,含缓存)到 Cloudflare GraphQL API 的三层架构,兼顾了安全性、性能和可维护性

本文的 Worker 示例展示了最基础的 API 调用和数据返回流程。如果你希望构建功能更完善、性能更优的流量看板(例如支持多维度数据、30天细分统计、POST 请求缓存、并发控制等),可以进一步阅读我博客的生产级实践文章。

👉 生产级流量分析 Worker 设计与实现 —— 完整拆解 270 行生产脚本的设计思路与核心技巧。


📝 本文发布于 栏轩阁

🌐 欢迎关注我的其他平台:

📧 联系我:2194844980@qq.com

posted @ 2026-06-11 09:07  PC2005-cloud  阅读(46)  评论(0)    收藏  举报