在使用分布式系统时,我们可能需要检测系统中的请求和调用。Zipkin 是一个开源分布式跟踪系统,能够帮助我们监测请求和跟踪微服务和应用程序的性能问题。zipkin-transport-http 是一个用于发送 Zipkin 跟踪数据到远程 Http 服务的 npm 包。 本文将介绍如何使用 zipkin-transport-http,以及其指导意义。
安装 zipkin-transport-http 包
在开始使用 zipkin-transport-http 包之前,需要确保您已经安装 Node.js,npm 和 Zipkin UI。您可以使用以下命令来安装 zipkin-transport-http 包:
npm install zipkin-transport-http
使用 zipkin-transport-http
zipkin-transport-http 包使用 Http 传输 Zipkin 跟踪数据。我们需要按照以下步骤来使用它:
- 创建一个 Zipkin Tracer。
-- -------------------- ---- ------- ----- - ------- ------------- - - ------------------ ----- ---------- - ------------------------------ ----- - ---------- - - --------------------------------- ----- ------- - --- --------------------- -- -- -------- --- ---- -- ---- -- ----- ------ - --- -------- -------- --------- --- --------------- ------- --- ------------ --------- ------------------------------------- -- ---- ------ ------ -------- ---- ------------ -------------- -- --------- - ---- ------- -- ------- -------------- -- --- ------------ ---------------------- -------- ---展开代码
上面的代码段创建了一个 Zipkin Tracer 对象。它使用了 zipkin-context-cls 包的上下文实现(您也可以使用其他的上下文实现)。BatchRecorder 通过一批发送告诉您的 Zipkin 服务器。HttpLogger 控制如何记录数据。在这里,我们传入了 Zipkin 服务器的端点,您应该把 endpoint 修改为您 Zipkin 服务器的实际 URL。
- 创建和注册一些 Zipkin 中间件
Zipkin 中间件非常有用,它们可以帮助我们以可读的形式打印出使用 Zipkin 的应用程序中的跟踪数据。
使用 Koa:
-- -------------------- ---- ------- ----- --- - --------------- ----- --------- - ---------------------- ----- --------------- - -------------------------------------- ----- --- - --- ------ ----- ------ - ------------ -- ----- ------ ---------- -- --- --- --- ------ ----------------------- ------ ---- -------------------------- ------ ----展开代码
使用 Express:
const express = require('express'); const {expressMiddleware} = require('zipkin-instrumentation-express'); const app = express(); // Apply Zipkin middleware to express app app.use(expressMiddleware({ tracer }));
上面的代码段将 Zipkin 中间件应用于 Koa 应用程序或 Express 应用程序,该中间件会自动记录应用程序生成的所有跟踪数据。
- 创建和发送 Zipkin 跟踪数据
我们可以使用 Zipkin Tracer 对象来创建新的跟踪数据,并发送它们到 Zipkin 服务器,以便记录和分析。
-- -------------------- ---- ------- ----- -------- -------------- - ----- --------- - ----------------------------- ------------------------ - -------- --- --- - ----- ------ - ----- ------------- ------------------- ------ ------- - ----- --- - ------------------- ----- -- - ------- - ------------------ - -展开代码
上面的代码段展示了如何为 JavaScript 应用程序创建 Zipkin 跟踪数据。我们可以使用 .child 方法来为跟踪数据创建一个新 span,使用 .local 方法来添加跟踪数据的本地属性(例如,span 名称、服务器名等),使用 .finish 方法来完成跟踪数据的记录,使用 .error 方法来记录错误,使用 .flush 方法来清空跟踪数据以在下一个请求时重新开始记录跟踪数据。
深入了解 Zipkin 跟踪数据
Zipkin 跟踪数据有助于我们理解和优化应用程序和跨服务的请求。以下是跟踪数据中主要的属性:
- traceId: 表示整个跟踪过程的唯一标识符。
- parentId: 表示该 span 的父 span 的 ID。
- spanId: 表示该 span 的唯一 ID。
- kind: 表示该 span 的类型(SERVER、CLIENT、PRODUCER、CONSUMER等)。
- name: 表示该 span 的名称。
- timestamp: 表示该 span 的开始时间戳。
- duration: 表示该 span 的持续时间。
- localEndpoint: 表示本地服务的 IP 地址和端口号。
- remoteEndpoint: 表示远程服务的 IP 地址和端口号等。
示例代码
下面是一个使用 zipkin-transport-http 包的示例代码:
-- -------------------- ---- ------- ----- - ------- ------------- - - ------------------ ----- ---------- - ------------------------------ ----- - ---------- - - --------------------------------- ----- ------- - --- --------------------- -- -- -------- --- ---- -- ---- -- ----- ------ - --- -------- -------- --------- --- --------------- ------- --- ------------ --------- ------------------------------------- -- ---- ------ ------ -------- ---- ------------ -------------- -- --------- - ---- ------- -- ------- -------------- -- --- ------------ ---------------------- -------- --- ----- -------- -------------- - ----- --------- - ----------------------------- ------------------------ - -------- --- --- - ----- ------ - ----- ------------- ------------------- ------ ------- - ----- --- - ------------------- ----- -- - ------- - ------------------ - -展开代码
结论
在监测和跟踪微服务和应用程序的性能问题时,Zipkin 是一个非常有用的开源分布式跟踪系统。zipkin-transport-http 包提供了一个用于发送 Zipkin 跟踪数据到远程 Http 服务的 npm 包。本文介绍了如何使用 zipkin-transport-http,以及它的指导意义。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/129563