可观测性栈与端到端可靠性工作流
四件套:Logs / Traces / Metrics / Errors
把前几章的成果摆到桌面上:读者手上有一个"按 V8 isolate + Layer-2 沙箱隔离"、按"env 暴露能力面"组织、能在"version / deployment / gradual / rollback / Preview URL" 控制面下安全发布的 Worker。它能跑、能被发布、能被回滚——但还看不见自己内部发生了什么。这一章要补上最后一块:把 Logs、Traces、Metrics、Errors 四个独立但可叠加的信号面合到读者的工作流里,并把它们接到版本归属与外部 OTLP 后端上。
先说清楚四件套各自负责什么,避免"哪个都能用、随便挑一个"。
Logs 是最朴素的信号面。Cloudflare 的 Logs 不是一个统一产品,而是四件子工具,按"实时性 vs 长期归档 vs 自定义"摆开:Workers Logs 自动收集/存储/过滤/分析日志(在 dashboard 留存最长三个月);Real-time logs 提供准实时反馈(适合部署后立刻看到第一波请求);Tail Workers 让用户写一段 Worker 代码对日志事件做自定义过滤/采样/转换(典型用法:写 Analytics Engine 做高基数聚合,或推送到外部 HTTP 端点);Workers Logpush 把 Workers Trace Event Logs 推到 R2/S3 等外部目的地。文档原话:"Cloudflare Logpush supports the ability to send Workers Trace Event Logs to a supported destination. Workers Trace Events Logpush includes metadata about requests and responses, unstructured console.log() messages and any uncaught exceptions."——Logpush 推的数据集是 workers_trace_events,logs 与 exceptions 字段合计有 16384 字符截断上限。
Traces 是分布式追踪的"开箱即用"路径。文档原话:"Cloudflare Workers provides tracing instrumentation out of the box — no code changes or SDK are required. Simply enable tracing on your Worker and Cloudflare automatically captures telemetry data for: Fetch calls; Binding calls; Handler calls."——你只要在 wrangler.toml 里加 observability.traces.enabled = true,无需 SDK、无需代码改动,运行时自动捕获 fetch 调用、binding 操作(KV、R2、Durable Objects)、handler 调用(fetch、scheduled、queue)的 spans。这条是 Workers 在可观测性上与许多 serverless 平台最大的差异:别家通常要求你接 OpenTelemetry SDK 或 DataDog 客户端,Workers 直接由运行时埋点。默认 head sampling 是 1.0(100% 流量全打);想控成本可以设 head_sampling_rate 调到 0–1 之间任意值。Workers 文档明确:Workers tracing 遵循 OpenTelemetry 标准,"making it compatible with popular observability platforms, such as Honeycomb, Grafana Cloud, and Axiom, while requiring zero development effort from you"。
Metrics & analytics 是 dashboard 上的图表层。Cloudflare 把指标分两层:per-Worker 指标(请求成功/错误、subrequests、wall time、CPU time、execution duration、memory P50/P90/P99/P999、invocation statuses)和 per-zone analytics。文档原话:"Worker metrics can be inspected for up to three months in the past in maximum increments of one week"——per-Worker 指标可查最长三个月、增量最大一周。invocation statuses 表把每次调用的结果分成五类:Success、Client disconnected、Worker threw exception(错误码 1101)、Exceeded resources(错误码 1102/1027)、Internal error。把"看到 5 位数错误码立即回查 invocation status"与前一章的 limits 表合起来,读者就有了一张完整的"信号 → 根因"映射。
Errors 是错误码体系。文档列了完整的客户端可见 1xxx 表(1101=JS 异常、1102=超 CPU/内存、1019=循环上限、1021=不可达主机、1022=路由失败、1024=subrequest 到 Cloudflare 自有 IP、1027=Free 日上限、1042=同 zone Worker-to-Worker fetch 受 globalfetchstrictlypublic 限制、10162=模块 Content-Type 不支持)、上传侧 100xx 表(10006=parse 失败、10021=validation 含 startup 超 1 s/memory 超 128 MB、10027=Worker size 超限、10052=绑定无 name、10054=env/secret 超 5 KB、10055=env/secret 超 64/128 上限、10056=绑定未找到、10068=无 handler、10069=handler 不被支持)、以及三条运行时错误(Network connection…