本文介绍了如何将Node.js应用接入链路追踪。

前提条件

在Node工程的Package中配置对Jaeger Client的依赖。

"dependencies": {
    "jaeger-client": "^3.12.0"
  }

  1. 登录链路追踪控制台,在左侧导航栏,单击集群设置
  2. 集群设置页面上单击接入点信息页签,在集群信息区域打开显示Token开关。
  3. 客户端采集工具区域单击需要使用的链路数据采集客户端。
  4. 在下方表格的相关信息列中,单击接入点信息末尾的复制图标。

Tracing Analysis Endpoint Section

如果应用部署于阿里云生产环境,则选择私网接入点,否则选择公网接入点。对于Zipkin,一般情况下请使用v2版接入点,v1版接入点仅限对Zipkin十分了解的高阶用户使用。

背景信息

不通过Agent而直接上报数据的原理如下图所示。

Report Tracing Data Directly

通过Agent上报数据的原理如下图所示。

Report Tracing Data By Agent

操作步骤

  1. 初始化配置。
    注意 请将<endpoint>替换成链路追踪控制台概览页面上相应客户端和相应地域的接入点。关于获取接入点信息的方法,请参见前提条件中的获取接入点信息
    const initTracer = require("jaeger-client").initTracer;
    
    const config = {
        serviceName: 'node-service',
        sampler: {
            type: "const",
            param: 1
        },
        reporter: {
            collectorEndpoint: "<endpoint>"
        },
    };
  2. 创建Tracer实例对象。
    const tracer = initTracer(config);
  3. 创建Span实例对象。
    const span = tracer.startSpan("say-hello");
    
    // 设置标签(可选,支持多个)。
    span.setTag("tagKey-01", "tagValue-01");
    
    // 设置事件(可选,支持多个)。
    span.log({event: "timestamp", value: Date.now()});
    
    // 标记Span结束span.finish();
  4. 登录链路追踪控制台并查看调用链。

基于Express的完整示例

const express = require("express");
const initTracer = require("jaeger-client").initTracer;
const app = express();

const config = {
    serviceName: 'node-service',
    sampler: {
        type: "const",
        param: 1
    },
    reporter: {
        collectorEndpoint: "<endpoint>"
    },
};
const tracer = initTracer(config);

app.all('*', function (req, res, next) {
    req.span = tracer.startSpan("say-hello");
    next();
});

app.get("/api", function (req, res) {
    const span = req.span;
    span.log({event: "timestamp", value: Date.now()});
    req.span.finish();
    res.send({code: 200, msg: "success"});
});

app.listen(3000, '127.0.0.1', function () {
    console.log('start');
});

更多信息

不是您要找的文档?鼠标悬浮在这里试一试。