npm 包 @opencensus/propagation-stackdriver 使用教程

阅读时长 5 分钟读完

简介

在前端开发过程中,跨越不同系统或语言的服务调用是很常见的场景。这时候,我们需要使用特定的 trace ID 和 span ID 标识请求,以便能够追踪和调试请求的全过程。然而,每个系统可能都有自己的 trace ID 和 span ID 格式和规则。使用 npm 包 @opencensus/propagation-stackdriver 可以使不同系统之间传递 trace ID 和 span ID 变得更加方便。

安装

安装@opencensus/propagation-stackdriver

使用

创建传播器

首先,我们需要创建一个传播器对象。传播器对象能够将 trace ID 和 span ID 从一个请求传播到另一个请求中:

从 HTTP 请求中提取 trace ID 和 span ID

然后,我们需要从一个入站的请求中提取 trace ID 和 span ID。下面是一个示例代码:

-- -------------------- ---- -------
----- ---- - ----------------

----- ------ - ----------------------- ---- -- -
  -- - ---- ----- -------------
  ----- ------------ - -----------------------------
  -- - ------------- --- ------- - ------
  ----- - -------- ------ - - --------------------- ------------ --
  -- - ------- - ------ ---------
  ----------- - --------
  ---------- - -------

  -- ----- ----

  -------------- --------
---

------------------

假设通过该代码运行在 HTTP server 上。那么,当我们从一个 HTTP 客户端向该服务器发送请求时,我们需要在 HTTP 请求头部中添加 trace-contexttrace-context 是存放 trace ID 和 span ID 信息的标准 HTTP 头部,如下所示:

其中:

  • 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 IDnpm 包 @opencensus/propagation-stackdriver 简化了跨系统追踪和调试信息传递的处理方式。我们阅读并跟随第三方库封装的注入和提取流程,仔细阅读相关 API 文档和源码,最终实现了在多个系统之间传播 trace ID 和 span ID。希望这篇文章能对读者有一定的启发和指导价值,使得大家对于 trace 和 span 有更加深刻理解。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/158071