链路追踪及监控

# 目前支持的链路节点

下面提到的节点全部默认实现与开启。

节点 支持版本 解释
http(s).createServer() - 所有的 HTTP(S) 服务器,包括用 koa、express 等创建的
http(s).request() - 所有发出的 HTTP(S) 请求,包括通过 request、urllib 等库发出的
npm: mongodb >=2.2.x 也包括依赖 mongodb 的 ORM 比如 mongoose
npm: mysql ^2.x 也包括其他依赖 mysql 的 ORM 比如 sequelize
npm: mysql2 ^1.5 -
npm: ioredis ^3.x -

其他需求请在 GitHub 中创建 Issue,我们会及时跟进。

# 如何查看链路

你可以通过 Restful 接口查看:

curl http://127.0.0.1:7002/trace?appName=my-site # my-site 是您的应用名

也可以通过可视化 Dashboard 查看,详情见文档

# 关于采样率

默认的采样率逻辑如下:

{
// 采样率
rate: process.env.NODE_ENV !== 'production' ? 100 : 10,
// 优先级高的链路是否跳出采样率限制,比如错误的链路
priority: true
}

生产环境(NODE_ENV 为 production 时采样率)为 10%,其他情况 100%。

这一设定可以通过全局配置修改,详情见文档

# 如何新增一个链路节点

通过获得单例 TraceManager 对象,可以实现对链路功能的全部接口访问。

const {traceManager} = require('dorapan');

可以通过 getCurrentTracer() 接口获得当前活跃的链路对象,通过:

const tracer = traceManager.getCurrentTracer(); // 如果不在一个链路中,将会获得 undefined
const span = tracer.startSpan('custom_span');
span.finish();

更多请参考这两个对象的 API Reference:

  • TraceManager
  • Tracer
  • Tracer 对象继承和实现自 [OpenTracer](https://github.com/opentracing/opentracing-javascript,请同样参考一下。

# 实现原理

待解释