在现代应用程序中,性能调试和优化是至关重要的。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:
npm install zipkin-context-cls --save
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 并在其中设置 traceId
、spanId
和 parentId
。我们还使用 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