middleware/qtrace.js
const { TraceConnectEgg } = require('@qnpm/qtrace-node');
module.exports = TraceConnectEgg
config/config.default.js
/* eslint valid-jsdoc: "off" */
'use strict';
module.exports = appInfo => {
const config = exports = {};
config.middleware = ['qtrace']; /** 在此处配置qtrace中间件,名字和你在middleware目录建的qtrace.js名保持一致 **/
return {
...config,
};
};
config/config.qtrace.js
module.exports = {
name:'qtrace_node_test', // 此字段来自qunar-app.properties
token: 'wjaQ/1i+sJQKQv/3Nvfk2LYTiLpn52tVJCT0A8V5s' // 此字段来自qunar-app.properties
autoTrace: true, // 如果开启自动探测,则trace中间件会自动劫持并收集所有路由过来的信息。(如果你只需要记录一个简单版本trace信息可以用这个)
backup: true, // 是否需要备份
backupDate: 60, // 备份时间间隔,默认60分钟
maxLogSize : 512, // 默认512M,超过512M自动备份
logFile: './logs/qtracer.span.log', // trace日志地址,qtracer.span.log文件名禁止修改,否则数据组抓取不到,logs文件夹必须跟业务的日志文件夹保持一致
logErrorFile: './logs/qtracer.error.log',// trace错误日志地址,logs文件夹必须跟业务的日志文件夹保持一致
backupDir: './logs/backup' // trace日志备份地址,logs文件夹必须跟业务的日志文件夹保持一致
}
注⚠️: 如果您需要自动收集,您只需要集成以上代码就可以了
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
async index() {
const { ctx } = this;
// 1: 用start方法注册(开启)一个span
const { qtrace, parentSpan } = ctx
const home = qtrace.start({
qtype: 'http',
desc: '首页',
url: '/home'
},{
childOf: parentSpan //childOf 是上下文信息,如果你是在根路由,上下文是ctx.parentSpan
})
ctx.body = 'hi, egg';
home.stop()
}
}
module.exports = HomeController;