链路追踪
Midway 采用社区最新的 open-telemetry 方案,其前身是知名的 OpenTracing 和 OpenCensus 规范,现阶段也是 CNCF 的孵化项目,社区许多知名的大公司如 Amazon,Dynatrace,Microsoft,Google,Datadog,Splunk 等都有使用。
open-telemetry 提供了通用的 Node.js 接入方案,以供应商无关的方式将数据接收,处理,导出,支持向一个或多个开源或者商业化的采集端发送可观测的数据(比如阿里云 SLS,Jaeger,Prometheus,Fluent Bit 等)。
Midway 提供了接入 open-telemetry 的 Node.js 方案,并提供了一些简单的使用 API。
信息
open-telemetry 的 Tracing 部分当前 Node.js SDK 已经 Release 1.0.0,可以在生产使用,Metrics 部分未正式发布,我们依旧在跟进(编码)中。
使用须知
open-telemetry 基于 Node.js 的 Async_Hooks 的稳定 API 实现,经过我们的测试,在最新的 Node.js v14/v16 性能影响已经很小,可以在生产使用,在 v12 情况下虽然可以使用,但是性能依旧有不小的损失,请尽可能在 Node.js >= v14 的版本下使用。
安装基础依赖
# Node.js 的 api 抽象
$ npm install --save @opentelemetry/api
# Node.js 的 api 实现
$ npm install --save @opentelemetry/sdk-node
# 常用 Node.js 模块的埋点实现
$ npm install --save @opentelemetry/auto-instrumentations-node
# jaeger 输出器
$ npm install --save @opentelemetry/exporter-jaeger
以上的包均为 open-telemetry 的官方包。
启用 open-telemetry
open-telemetry 的模块请尽可能加在代码的最开始(比框架还要早),所以在不同场景中,我们有不同的添加方式。