来自浏览器的 OpenTelemetry 追踪
在 React 中设置 OTel JavaScript SDK,为用户交互创建跨度,并导出到后端收集器
来自浏览器的 OpenTelemetry 追踪 是 CoddyKit 上的免费 React Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
OpenTelemetry JavaScript SDK
用于浏览器的 OpenTelemetry JavaScript SDK 由多个软件包组成:@opentelemetry/sdk-trace-web 提供核心追踪实现,@opentelemetry/instrumentation-fetch 会自动为所有 fetch API 调用创建跨度,@opentelemetry/exporter-trace-otlp-http 会将跨度发送到采集器。
TracerProvider:OTel 追踪的根
TracerProvider 是 OpenTelemetry 中的核心配置对象。它保存 SpanProcessors 列表(用于决定已完成跨度的处理方式)、描述应用的资源信息(服务名称、版本),以及采样配置。
BatchSpanProcessor:高效导出
BatchSpanProcessor 会在内存中收集已完成的跨度,然后批量导出,而不是逐个发送跨度。这样可以大幅减少向采集器发送的 HTTP 请求数量,提升浏览器性能,并减轻 OTel 采集器端点的负载。
OTLPTraceExporter:发送到采集器
OTLPTraceExporter 会通过 HTTP,以 JSON 或 protobuf 格式将批量跨度发送到兼容 OpenTelemetry 的采集器。您只需配置采集器 URL(例如 OTel 采集器代理端点),导出器就会自动处理序列化和重试逻辑。
什么是跨度
跨度表示追踪中的一个独立工作单元,例如组件挂载、API 调用或用户交互。跨度包含名称、开始时间、结束时间、状态(OK 或 ERROR)以及一组键值属性。相关跨度通过共享的追踪 ID 和父子关系关联起来。
手动开始和结束跨度
您可以使用 provider.getTracer('react-app') 创建追踪器,并使用 tracer.startSpan('component-mount') 开始跨度。工作完成后,调用 span.end() 记录结束时间。请始终结束跨度——泄漏的跨度会浪费内存,并在您的可观测性后端中产生不完整的数据。
向跨度添加属性
属性可以使用上下文数据丰富跨度:span.setAttribute('user.id', userId) 或 span.setAttribute('route', location.pathname)。属性可以在可观测性后端中搜索,从而支持这样的查询:“显示用户 42 的所有缓慢跨度”或“显示 /checkout 路由上的所有错误”。
自动检测 fetch 请求
@opentelemetry/instrumentation-fetch 会修改全局 fetch 函数,为每个发出的 HTTP 请求自动创建跨度。跨度会捕获 URL、方法、HTTP 状态码和持续时间,无需更改现有的 fetch 调用。
通过 W3C TraceContext 传播上下文
当 fetch 插桩为传出请求创建跨度时,它会将 W3C TraceContext 的 traceparent 标头注入请求中。接收方后端读取此标头并继续同一条追踪链,从而创建一条连接浏览器与服务器的追踪链。
在您的 React 应用中初始化 OpenTelemetry
OpenTelemetry 初始化必须在任何组件挂载之前完成——通常位于应用入口文件(main.tsx)中,在调用 ReactDOM.createRoot 之前。创建提供程序,注册处理器和导出器,并调用 provider.register(),使其成为全局 TracerProvider。
采样:控制追踪数据量
在高流量应用中记录每次用户交互会生成海量追踪数据。请在 TracerProvider 中配置 TraceIdRatioBased 采样器(例如对 10% 的追踪进行采样)以减少数据量。请始终使用 ParentBased 采样器对 100% 的错误追踪进行采样,确保不会遗漏任何错误。
OpenTelemetry BatchSpanProcessor 的作用
为什么在浏览器应用中使用 BatchSpanProcessor,而不是 SimpleSpanProcessor?
课程回顾
OpenTelemetry JavaScript SDK 使用 TracerProvider、BatchSpanProcessor 和 OTLPTraceExporter 为浏览器添加插桩。跨度表示经过属性丰富的工作单元。Fetch 插桩会自动为 API 调用创建跨度,并注入 W3C TraceContext 标头,以实现端到端的分布式追踪。请尽早初始化,合理进行采样,并始终结束跨度,以保持整洁的追踪数据。
常见问题解答
「来自浏览器的 OpenTelemetry 追踪」课时是免费的吗?
是的 — 「来自浏览器的 OpenTelemetry 追踪」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「来自浏览器的 OpenTelemetry 追踪」这节课中我会学到什么?
在 React 中设置 OTel JavaScript SDK,为用户交互创建跨度,并导出到后端收集器 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「来自浏览器的 OpenTelemetry 追踪」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 前端可观测性:内容与原因
- 来自浏览器的 OpenTelemetry 追踪
- 真实用户监控与 Web Vitals
- 关联前端与后端追踪