在上面文件所在的目录下执行 docker-compose up -d 即可完成本地搭建 。
搭建完成后 , 在浏览器中打开地址 http://localhost:9411 , 会看到如下图所示页面:
文章插图
接着打开地址 http://localhost:9200 , 会看到如下图所示页面:
文章插图
至此 , zipkin 的本地环境就搭建好啦 。下面我就将介绍 Node.js 应用如何对接 zipkin 。
三、Node.js 接入 zipkin3.1 搞定全链路信息获取这个我在 《??Node.js 应用全链路追踪技术——全链路信息获取??》 文章中 , 已经详细阐述了 , 如何去获取全链路信息 。
3.2 搞定传输层因为 zipkin 是基于 OpenTracing 标准实现的 。因此我们只要搞定了 zipkin 的传输层 , 也就搞定了其他主流分布式追踪系统 。
这里我们用到了 zipkin 官方提供的两个 npm 包 , 分别是:
- zipkin
- zipkin-transport-http
下面我们将详细介绍在传输层 , 如何将将数据发送到 zipkin 。
3.3 传输层基础封装核心代码实现和相关注释如下:
const {BatchRecorder,Tracer,// ExplicitContext,jsonEncoder: { JSON_V1, JSON_V2 },} = require('zipkin')const { HttpLogger } = require('zipkin-transport-http') // const ctxImpl = new ExplicitContext(); // 配置对象const options = {serviceName: 'zipkin-node-service',targetServer: '127.0.0.1:9411',targetApi: '/api/v2/spans',jsonEncoder: 'v2'} // http 方式传输async function recorder ({ targetServer, targetApi, jsonEncoder }) => new BatchRecorder({logger: new HttpLogger({endpoint: `${targetServer}${targetApi}`,jsonEncoder: (jsonEncoder === 'v2' || jsonEncoder === 'V2') ? JSON_V2 : JSON_V1,})}) // 基础记录const baseRecorder = await recorder({targetServer: options.targetServertargetApi: options.targetApijsonEncoder: options.jsonEncoder})
至此 , 传输层的基础封装就完成了 , 我们抽离了 baseRecorder 出来 , 下面将会把全链路信息接入到传输层中 。3.4 接入全链路信息这里说下官方提供的接入 SDK ,代码如下:
const { Tracer } = require('zipkin')const ctxImpl = new ExplicitContext()const tracer = new Tracer({ ctxImpl, recorder: baseRecorder })// 还要处理请求头、手动层层传递等事情
上面的方式缺点比较明显 , 需要额外去传递一些东西 , 这里我们使用上篇文章提到的 Zone-Context , 代码如下:const zoneContextImpl = new ZoneContext()const tracer = new Tracer({ zoneContextImpl, recorder: baseRecorder })// 仅此而已 , 不再做额外处理
对比两者 , 明显发现 , Zone-Context 的实现方式更加的隐式 , 对代码入侵更小 。这也是单独花一篇文章介绍 Zone-Context 技术原理的价值体现 。自此 , 我们完成了传输层的适配 , Node.js 应用接入 zipkin 的核心步骤基本完成 。
3.5 搞定 zipkin 收集、存储、展示这部分中的收集、展示功能 , zipkin 官方自带完整实现 , 无需进行二次开发 。存储这块 , 提供了 MySQL 、 Elasticsearch 等接入方式 。可以根据实际情况去做相应的接入 。本文采用 docker-compose 集成了 ElasticSearch 。
四、总结自此 , 我们已经完成基于业界通用 OpenTracing 标准实现的 zipkin 的 Node.js 方案 。希望大家看完这两篇文章 , 对 Node.js 全链路追踪 , 有一个整体而清晰的认识 。
参考资料:
- ??zipkin 官网
【Node.js 应用全链路追踪技术——全链路信息存储】
推荐阅读
- 高性能计算:RoCE技术分析及应用
- 2023年企业安全运营团队需面对的7道坎
- 郭富城|方媛春节晒全家福,57岁郭富城头发乌黑,俩女儿一个像爸一个像妈
- 济南|扬中打好稳就业组合拳 全力以复共沐就业“春风”
- 珠海的全日制浸泡式英语好吗 浸泡式英语
- 抖音超市全面开放!能否“后来者居上”?
- 使用苹果全家桶一年,谈谈我的体会!什么是必买的配件?
- 胡歌|胡歌官宣生女成开年第一瓜,唐嫣似早已知情,仙剑三全员已婚生娃
- 黄河多长多少千米?请问黄河全长大约多少千米?
- 陈佩斯|陈佩斯妹妹全家福曝光!老公帅气学霸女儿漂亮,女婿是广东富二代