轉眼新年過了,開始了搬磚的日子。在這裏給你們拜個晚年,送上一些小知識,但願你們好搬磚!html
鏈路追蹤工具,base on pandoranode
npm install klg-tracer
複製代碼
Node.js >= 8.2.1 required.git
Pandora 提供基於 OpenTracing 標準的鏈路追蹤信息,在此基礎上,klg-tracer 自定義了一些 tags,並支持將 tracer 信息寫入 mongo。github
TODOmongodb
app.tstypescript
import {TraceService, Tracer} from 'klg-tracer'
new TraceService().registerHooks({
httpServer: {
useKoa:true, // 在 koa 設置鉤子,比直接在 http 層設置鉤子穩定
// 過濾器,只記錄特定接口, 注意 return true 的纔會被過濾
requestFilter: function (req) {
const urlParsed = url.parse(req.url, true);
return urlParsed.pathname.indexOf('product/') === -1;
}
}
}).registerMongoReporter({
mongoUrl: config.database.mongodb[0].url,
collectionName: 'tracer'
});
複製代碼
完整的配置能夠見 src/domainnpm
interface TracerOptions {
httpServer?: {
recordGetParams?: boolean, // 是否記錄 query
recordPostData?: boolean, // 是否記錄 post data
recordResponse?: boolean, // 是否記錄 response
requestFilter?: requestFilter, // 過濾器
interceptor?: interceptor // 中間件 TODO
},
httpClient?: {
enabled: boolean, options?: {
recordGetParams?: boolean,
recordPostData?: boolean,
recordResponse?: boolean
}
},
mongodb?: { enabled: boolean, options?: any }
}
複製代碼
啓動你的 Web 服務並訪問,相關的請求信息將會寫入 tracer 表中。json
Search:api
db.tracer.find({name : 'http-server'}).sort({_id : -1})
複製代碼
Result:bash
{
"_id" : ObjectId("5ad99bd3f29cf14de64516b3"),
"tags" : {
"httpMethod" : "POST",
"url" : "/api/v1/account/register",
"data" : {
"userId" : "5527da927855af35354c39eb",
"userRole" : "INVESTOR"
},
"response" : {
"code" : 0,
"message" : "success",
"data" : {
"html" : "html"
}
}
},
"traceId" : "6e11fe95c2035a7a",
"name" : "http-server",
"timestamp" : 1524210643694.0,
"duration" : 152,
"createdAt" : ISODate("2018-04-20T07:50:43.874Z"),
"updatedAt" : ISODate("2018-04-20T07:50:43.874Z"),
"__v" : 0
}
複製代碼
$ npm i
$ npm test
複製代碼
implements session with async_hooks and cls-hooked
serve : hack http createServer method, register listener.
http-client : hack http request method, register listener.
3.0.0
1.2.0
1.1.0
1.0.3
1.0.0
1 thenable 函數會 break cls 的上下文,像 mongoose 和 superagent 都是在 prototype 裏添加 then function 來支持 Promise 的,全部都會有這個問題。 目前只能經過改變寫法來避免這個問題,例如:
break session
await User.findOne({})
複製代碼
work
await User.findOne({}).then()
複製代碼
詳情見此 issue github.com/midwayjs/pa…
2 mongodb nodejs driver 3.0 版本升級了 apm 的實現,Pandorajs 還未支持 詳情見此 issue github.com/midwayjs/pa…
著做權歸本文做者全部,未經受權,請勿轉載,謝謝。