概述
tj 实现了一个 jstrace,可以用于动态的对node进行类似于dtrace,ktap的trace分析,可以动态检测线上api接口的访问性能,用于express中tj也实现了一个中间件express-jstrace,但是express-jstrace更像一个filter,只能检测req res的性能,通过bearcat提供的强大的AOP支持, 让监控线上方法调用性能成为可能
实现
bearcat-jstrace 即是基于jstrace和bearcat aop的实现, 使用起来也是相当的简单,你只需要覆盖定义下 bearcat-jstrace 内部实现的 jstraceAspect 的AOP pointcut 定义即可实现定制化,比如你想监控所有的Dao方法调用(这里有一个归约就是所有的Dao方法命名以Dao结尾), 那么你需要在 bearcat 的 context.json 里面这样配置即可:
"beans": [{
"id": "jstraceAspect",
"func": "node_modules.bearcat-jstrace.lib.aspect.jstraceAspect",
"aop": [{
"pointcut": "around:\\w+Dao.*?",
"advice": "doJstrace",
"runtime": true
}]
}]
默认情况下会对所有的Service方法进行监控
Probes
默认的jstrace探测点命名为:
- bearcat:method:start
- bearcat:method:end
监测使用
编写trace.js
var m = {};
exports.local = function(traces) {
traces.on('bearcat:method:start', function(trace) {
console.log(JSON.stringify(trace));
});
traces.on('bearcat:method:end', function(trace) {
console.log(JSON.stringify(trace));
});
};
npm install -g jstrace
jstrace trace.js
即可进行监控
Note: 默认情况下监控的是方法, trace 里有method代表监控的方法, 监控的对象默认是无的,如果你想有监控的对象,那么需要在被监控的目标对象中,定义traceName, 比如
HelloService.prototype.traceName = "HelloService";
TODO
- 可视化与数据分析统计