npm 包 zipkin-context-cls 使用教程

阅读时长 7 分钟读完

在现代应用程序中,性能调试和优化是至关重要的。Zipkin 是一个开源工具,可以帮助我们理解和追踪应用程序内不同组件之间的调用。 zipkin-context-cls 是一个用于 Node.js 程序的 npm 包,可以帮助我们在 Zipkin 的跟踪信息中传递上下文。

本文将介绍 npm 包 zipkin-context-cls 的使用方法,涵盖针对 Zipkin 的基础知识、安装和设置包、使用第三方库或传递自定义上下文等方面的详细指南。本文旨在帮助读者深入了解如何在应用程序中使用 Zipkin 进行性能优化。

Zipkin 基础知识

Zipkin 是一个分布式的跟踪系统,它可以帮助我们追踪分布式系统中的请求并分析应用程序的性能。 Zipkin 跟踪请求的路径,并在每个组件中添加特殊注释,记录每个组件的时间戳和其他指标。

Zipkin 把整个应用程序看作是包含许多组件的分布式系统,每个组件都应该被定义成单独的 span (跟踪单元)。当请求从一个组件传递到另一个组件时,我们需要将上下文传递下去,以便在 Zipkin 跟踪的 span 中正确记录时间戳和指标。

安装和设置 npm 包 zipkin-context-cls

zipkin-context-cls 是一个 Node.js 模块,可以使用 npm 安装。它提供了一种通过 Node.js 全局上下文存储传递 Zipkin 上下文的方法。

Step 1: 安装 zipkin-context-cls npm 包

可以采用以下命令来安装 zipkin-context-cls:

Step 2: 配置 zipkin-context-cls

zipkin-context-cls 可以通过以下方式进行设置:

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

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

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

在上面的示例中,我们在 tracer 对象中传递了一个 ctxImpl 对象,ctxImpl 是 zipkin-context-cls 提供的一个用于存储 Zipkin 上下文的对象。在后续的 span 中,我们将使用属性来访问上下文。

使用 zipkin-context-cls

接下来,我们将介绍如何使用 zipkin-context-cls 将 Zipkin 上下文传递给不同的组件。

传递 Zipkin 上下文

我们可以在一个组件的 span 中设置属性,以便该属性可以被其他组件的 span 访问。

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

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

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

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

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

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

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

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

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

getRowById 方法中,我们定义了一个新的 span 并在其中设置 traceIdspanIdparentId。我们还使用 span.recordAnnotation 方法声明了两个注解,记录为新建 span 的开始和结束。

传递自定义上下文

我们可以使用 zipkin-context-cls 存储和传递任何类型的上下文数据。在下面的示例中,zipkin-context-cls 作为一个中间件用于 Express。我们可以使用中间件从请求中获取值并在 span 上设置值。

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

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

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

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

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

在上述示例中,我们定义了 Express 中间件,将 my-header 存储在上下文中,然后在 /my/path 端点上创建新的 span,并将其 parentId 设置为 traceId.spanId。在 span 中,我们还在 baggage 中存储了 myOtherValue

结论

本文介绍了 npm 包 zipkin-context-cls 的安装和设置过程,并涉及使用 zipkin-context-cls 将 Zipkin 上下文传递给组件的方法。我们还介绍了如何使用自定义上下文存储和传递上下文数据,以方便跟踪应用的性能。使用 zipkin-context-cls,我们可以轻松跟踪应用程序的性能,并了解分布式系统内组件之间的行为和交互。

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

纠错
反馈