Workers Analytics Engine 提供大规模时序分析能力。你可以用它跟踪自定义指标、构建按用量计费,或按客户了解服务健康状况。
与日志不同,Analytics Engine 专为高基数数据的聚合查询而设计。写入是非阻塞的,不会影响请求延迟。
在 Wrangler 配置文件中添加 Analytics Engine 数据集绑定(binding)。首次写入时会自动创建数据集。
{
"analytics_engine_datasets": [
{
"binding": "ANALYTICS",
"dataset": "my_dataset",
},
],
}[[analytics_engine_datasets]]
binding = "ANALYTICS"
dataset = "my_dataset"export default {
async fetch(request, env) {
const url = new URL(request.url);
// Write a page view event
env.ANALYTICS.writeDataPoint({
blobs: [
url.pathname,
request.headers.get("cf-connecting-country") ?? "unknown",
],
doubles: [1], // Count
indexes: [url.hostname], // Sampling key
});
// Write a response timing event
const start = Date.now();
const response = await fetch(request);
const duration = Date.now() - start;
env.ANALYTICS.writeDataPoint({
blobs: [url.pathname, response.status.toString()],
doubles: [duration],
indexes: [url.hostname],
});
// Writes are non-blocking - no need to await or use waitUntil()
return response;
},
};interface Env {
ANALYTICS: AnalyticsEngineDataset;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
// Write a page view event
env.ANALYTICS.writeDataPoint({
blobs: [
url.pathname,
request.headers.get("cf-connecting-country") ?? "unknown",
],
doubles: [1], // Count
indexes: [url.hostname], // Sampling key
});
// Write a response timing event
const start = Date.now();
const response = await fetch(request);
const duration = Date.now() - start;
env.ANALYTICS.writeDataPoint({
blobs: [url.pathname, response.status.toString()],
doubles: [duration],
indexes: [url.hostname],
});
// Writes are non-blocking - no need to await or use waitUntil()
return response;
},
};每个数据点包含:
- blobs(字符串)— 用于分组和筛选的维度。可用于路径、区域、状态码或客户 ID。
- doubles(数字)— 要记录的数值,例如计数、时长或大小。
- indexes(字符串)— 用作采样键的单个字符串。将相关事件分组到同一 index 下。
使用 SQL API 查询数据:
curl "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/analytics_engine/sql" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--data "SELECT blob1 AS path, SUM(_sample_interval) AS views FROM my_dataset WHERE timestamp > NOW() - INTERVAL '1' HOUR GROUP BY path ORDER BY views DESC LIMIT 10"- Analytics Engine 文档 — Workers Analytics Engine 完整参考。
- SQL API 参考 — 查询语法与可用函数。
- Grafana 集成 — 在 Grafana 中可视化 Analytics Engine 数据。