简介
在前端开发过程中,跨越不同系统或语言的服务调用是很常见的场景。这时候,我们需要使用特定的 trace ID 和 span ID
标识请求,以便能够追踪和调试请求的全过程。然而,每个系统可能都有自己的 trace ID 和 span ID
格式和规则。使用 npm
包 @opencensus/propagation-stackdriver 可以使不同系统之间传递 trace ID 和 span ID
变得更加方便。
安装
安装@opencensus/propagation-stackdriver
:
npm install @opencensus/propagation-stackdriver --save
使用
创建传播器
首先,我们需要创建一个传播器对象。传播器对象能够将 trace ID 和 span ID
从一个请求传播到另一个请求中:
const { StackdriverTracePropagation } = require('@opencensus/propagation-stackdriver'); const propagation = new StackdriverTracePropagation();
从 HTTP 请求中提取 trace ID 和 span ID
然后,我们需要从一个入站的请求中提取 trace ID 和 span ID
。下面是一个示例代码:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ----------------------- ---- -- - -- - ---- ----- ------------- ----- ------------ - ----------------------------- -- - ------------- --- ------- - ------ ----- - -------- ------ - - --------------------- ------------ -- -- - ------- - ------ --------- ----------- - -------- ---------- - ------- -- ----- ---- -------------- -------- --- ------------------
假设通过该代码运行在 HTTP server 上。那么,当我们从一个 HTTP 客户端向该服务器发送请求时,我们需要在 HTTP 请求头部中添加 trace-context
。trace-context
是存放 trace ID 和 span ID
信息的标准 HTTP 头部,如下所示:
trace-context: "TRACE-ID/SPAN-ID;o=TRACE-OPTIONS"
其中:
TRACE-ID
:trace ID. 全局唯一标识一个 trace. 使用十六进制编码表示。SPAN-ID
:span ID. 全局唯一标识一个 span. 使用十六进制编码表示。TRACE-OPTIONS
:用于定义一些特殊的追踪选项。o=1
:请求跨度是 root span.o=2
:请求跨度不是 root span.
传播 trace ID 和 span ID 到下游请求
最后,我们需要传播 trace ID 和 span ID
到下一个请求之中。下面是一个例子:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ----- - ---------------------- ----- ------ - ----------------------- ----- ---- -- - -- ------ ---- ----- ---- - ----------------------- ----- ------ -------- ---- -------- --------- ----- ---------------- --- -- - ------- - ------ ----------- ----- ------- - --- -------------------- -------- ------------ ------- ----------------------- -- --------- -- -- ---- -- ----- ------- - - ---------------- --------------------------------------------------------------- -- -- ---- ----- -------- - ----- --------------------------------------------- - ------- --- -- ----- ---- -- ------ ---------------------------- ------- --------------- -- -- ---- ----------- -------------- -------- --- ------------------
在这个例子中,我们首先创建一个新的 span 表示调用了一个外部服务。然后,我们使用 propagation
对象从 req
的 trace ID 和 span ID 中提取出相应的值。接着,我们将新的 span 的 trace ID 和 span ID
注入到一个新的请求中,并将之加入到该请求的头部中。最后,我们使用 HTTP 客户端发送请求,并在响应处理结束之后结束 span。
总结
在本文中,我们介绍了如何在前端系统之间传递 trace ID 和 span ID
。 npm
包 @opencensus/propagation-stackdriver 简化了跨系统追踪和调试信息传递的处理方式。我们阅读并跟随第三方库封装的注入和提取流程,仔细阅读相关 API 文档和源码,最终实现了在多个系统之间传播 trace ID 和 span ID
。希望这篇文章能对读者有一定的启发和指导价值,使得大家对于 trace 和 span 有更加深刻理解。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/158071