Tail Worker 接收其他 Worker(称为 producer Worker)执行的信息,例如 HTTP 状态、传递给 console.log() 的数据或未捕获的异常。Tail Workers 可以处理日志以进行告警、调试或分析。
Tail Workers 面向 Workers Paid 和 Enterprise 计划的所有客户。Tail Workers 按 CPU 时间 计费,而非按请求数计费。
Tail Worker 在包含应用逻辑的 producer Worker(Tail Worker 将跟踪的 Worker)调用完成后自动调用。它在 producer 执行完成后捕获事件。整个请求生命周期中的事件,包括通过 Service Bindings 和 Dynamic Dispatch 的潜在子请求,都将被包含。你可以过滤、更改数据格式并将事件发送到任何 HTTP 端点。为快速调试,Tail Workers 可用于将日志发送到 KV 或任何数据库。
要配置 Tail Worker:
- 创建 Worker 作为 Tail Worker。
- 向 Worker 添加
tail()处理器。每次调用 Tail Worker 所连接的 producer Worker 时,都会调用tail()处理器。以下 Worker 代码是将数据发送到 HTTP 端点的 Tail Worker:
export default {
async tail(events) {
fetch("https://example.com/endpoint", {
method: "POST",
body: JSON.stringify(events),
});
},
};以下 Worker 代码是 events 对象可能样子的示例:
[
{
"scriptName": "Example script",
"outcome": "exception",
"eventTimestamp": 1587058642005,
"event": {
"request": {
"url": "https://example.com/some/requested/url",
"method": "GET",
"headers": {
"cf-ray": "57d55f210d7b95f3",
"x-custom-header-name": "my-header-value"
},
"cf": {
"colo": "SJC"
}
}
},
"logs": [
{
"message": ["string passed to console.log()"],
"level": "log",
"timestamp": 1587058642005
}
],
"exceptions": [
{
"name": "Error",
"message": "Threw a sample exception",
"timestamp": 1587058642005
}
],
"diagnosticsChannelEvents": [
{
"channel": "foo",
"message": "The diagnostic channel message",
"timestamp": 1587058642005
}
]
}
]- 将以下内容添加到 producer Worker 的 Wrangler 文件:
{
"tail_consumers": [
{
"service": "<TAIL_WORKER_NAME>"
}
]
}[[tail_consumers]]
service = "<TAIL_WORKER_NAME>"若需要聚合分析而非单个日志事件,考虑从 Tail Worker 写入 Workers Analytics Engine。Analytics Engine 针对高基数、时间序列数据进行了优化,你可以使用 SQL 查询。
例如,你可以使用 Tail Worker 按端点统计错误、按客户跟踪响应时间或构建使用指标,然后将这些聚合写入 Analytics Engine 进行查询和可视化。
export default {
async tail(events, env) {
for (const event of events) {
env.ANALYTICS.writeDataPoint({
blobs: [event.scriptName, event.outcome],
doubles: [1],
indexes: [event.event?.request?.cf?.colo ?? "unknown"],
});
}
},
};请参阅 Analytics Engine 文档了解写入和查询数据的更多详情。
tail()处理器 API 文档 - 了解如何在 Worker 中设置tail()处理器。- Analytics Engine - 从 Worker 写入自定义分析以进行高基数、时间序列查询。
- 错误和异常 - 查看常见 Workers 错误。
- 本地开发 - 在本地开发和测试 Workers。
- Source maps 和堆栈跟踪 - 了解如何启用 source maps 并为 Workers 生成堆栈跟踪。