[ PROMPT_NODE_24356 ]
Tail Workers 设计模式
[ SKILL_DOCUMENTATION ]
# Tail Workers 常用模式
## 社区库
虽然大多数 Tail 智能体实现是自定义的,但以下库可能会有所帮助:
**日志/可观测性:**
- **Axiom** - `axiom-cloudflare-workers` (npm) - 直接集成 Axiom
- **Baselime** - 用于 Baselime 可观测性平台的 SDK
- **LogFlare** - 结构化日志聚合
**类型定义:**
- **@cloudflare/workers-types** - 官方 TypeScript 类型 (使用 `TraceItem`)
**注意:** 大多数集成需要自定义 tail 处理程序实现。请参阅下方的集成示例。
## 基础模式
### HTTP 端点日志记录
typescript
export default {
async tail(events, env, ctx) {
const payload = events.map(event => ({
script: event.scriptName,
timestamp: event.eventTimestamp,
outcome: event.outcome,
url: event.event?.request?.url,
status: event.event?.response?.status,
logs: event.logs,
exceptions: event.exceptions,
}));
ctx.waitUntil(
fetch(env.LOG_ENDPOINT, {
method: "POST",
body: JSON.stringify(payload),
})
);
}
};
### 仅错误追踪
typescript
export default {
async tail(events, env, ctx) {
const errors = events.filter(e =>
e.outcome === 'exception' || e.exceptions.length > 0
);
if (errors.length === 0) return;
ctx.waitUntil(
fetch(env.ERROR_ENDPOINT, {
method: "POST",
body: JSON.stringify(errors),
})
);
}
};
## 存储集成
### 带 TTL 的 KV 存储
typescript
export default {
async tail(events, env, ctx) {
ctx.waitUntil(
Promise.all(events.map(event =>
env.LOGS_KV.put(
`log:${event.scriptName}:${event.eventTimestamp}`,
JSON.stringify(event),
{ expirationTtl: 86400 } // 24 小时
)
))
);
}
};
### Analytics Engine 指标
typescript
export default {
async tail(events, env, ctx) {
ctx.waitUntil(
Promise.all(events.map(event =>
env.ANALYTICS.writeDataPoint({
blobs: [event.scriptName, event.outcome],
doubles: [1, event.event?.response?.status ?? 0],
indexes: [event.event?.request?.cf?.colo ?? 'unknown'],
})
))
);
}
};
## 过滤与路由
按路由、结果或其他标准进行过滤:
typescript
export default {
async tail(events, env, ctx) {
// 路由过滤
const apiEvents = events.filter(e =>
e.event?.request?.url?.includes('"