Edge Functions 全链路观测与 OpenTelemetry 落地实践概述边缘函数承担路由与轻计算职责。结合 OTEL 的 Traces/Metrics/Logs 实现端到端追踪,可快速定位跨区域问题与性能瓶颈。traceparent 传递与采样// 客户端:注入 traceparent(简化) export async function tracedFetch(input: RequestInfo, init: RequestInit = {}) { const traceparent = (window as any).__traceparent || undefined return fetch(input, { ...init, headers: { ...(init.headers || {}), ...(traceparent ? { traceparent } : {}) } }) } // 边缘函数/Route Handler(Next.js runtime='edge') import { NextResponse } from 'next/server' export const runtime = 'edge' export async function GET(req: Request) { const tp = req.headers.get('traceparent') const start = Date.now() const res = await fetch(process.env.API_URL!, { headers: tp ? { traceparent: tp } : {} }) const body = await res.text() const duration = Date.now() - start await fetch(process.env.OTLP_HTTP_EXPORT!, { method: 'POST', body: JSON.stringify({ traceparent: tp, duration }) }) return new NextResponse(body, { headers: { 'X-Edge-Duration': String(duration) } }) } OTLP 导出(HTTP)// 导出器示例(简化) async function exportTrace(span: any) { await fetch(process.env.OTLP_HTTP_EXPORT!, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(span) }) } 指标与日志// 边缘指标(Counter/Gauge) await fetch(process.env.OTLP_HTTP_METRICS!, { method: 'POST', body: JSON.stringify({ name: 'edge_requests', value: 1, labels: { region: (req as any).geo?.country || 'unknown' } }) }) // 结构化日志 await fetch(process.env.OTLP_HTTP_LOGS!, { method: 'POST', body: JSON.stringify({ level: 'info', message: 'edge handled', ts: Date.now() }) }) 采样治理客户端 INP>200ms 或错误率上升时提升采样比;正常流量采用 1-5% 抽样。技术参数与验证边缘运行时:Vercel Edge/Cloudflare Workers;OTLP Collector 接收 HTTP端到端链路覆盖率 > 90%;跨区域延迟对比可视化应用场景跨区域路由与性能排查;边缘错误定位与容量评估。注意事项合理的采样与脱敏;不要在客户端记录敏感信息。常见问题Q: Edge 环境能直接使用 OTEL SDK 吗?A: 部分 SDK 需要 Node 能力。边缘环境可采用 OTLP HTTP 手动导出模式。参考资料OpenTelemetry 协议与 Collector 文档;Next.js Edge Runtime 文档。---发布信息:已发布 · 技术验证 · 阅读 40 分钟 · CC BY-SA 4.0

发表评论 取消回复