在 NestJS 应用程序中注释 Newrelic 中的 annonymus 中间件
Annotating an annonymus middleware in Newrelic in a NestJS app
我正在为一个项目使用 NestJS(带有 Express Server)并尝试优化某些端点的性能,使用 New Relic 我注意到所有端点的大部分响应时间都花在了匿名中间件,某些时候达到89%
有没有办法找出这是哪个中间件?
我已经在 another question 中对此做出了回答,但我认为我应该在这里更深入地了解 Nest 的幕后情况。
Nest 中的路由处理程序技术上是 express 中的中间件。即
@Controller('test')
export class TestController {
@Get()
testGet() {
return 'do the thing';
}
}
Get 在幕后进行了转换(通过一些非常棒的代码)
app.get('test', (req, res, next) => {
res.send('do the thing');
})
现在当我们添加过滤器时
@Controller('test')
export class TestController {
@Get()
@UseFilter(SomeExceptionFilter)
testGet() {
return 'do the thing';
}
}
更多的奇迹发生了,我们明白了
app.get('test', (req, res, next) => {
let returnVal = '';
try {
returnVal = controller.testGet();
} catch (err) {
returnVal = someExceptionFilterInstnace.catch(err, customArgumentHostThatNestMaintains);
}
res.send(returnVal);
})
(免责声明:这不是实际发生的事情的完美 1:1 表示,因为发生了很多事情,但这应该让人们明白它最终都是中间件)
添加服务时也会发生这种情况,它们只是 express/fastify 中间件内部的方法调用,因此它们不会在 newrelic 中以很好的方式分解。
不幸的是,我不知道在 newrelic 中有什么好方法可以帮助解决这个问题,也不知道如何添加更好的注释。查看中间件的时间,您有 218 毫秒,这还不算太糟糕。很可能是某个地方的数据库操作,所以我会检查你的管道、守卫和拦截器,以及你的服务,看看你是否有任何可能的大查询。如果不出意外,您可以在本地进行一些分析并获得更多有关所用时间的原始信息
我正在为一个项目使用 NestJS(带有 Express Server)并尝试优化某些端点的性能,使用 New Relic 我注意到所有端点的大部分响应时间都花在了匿名中间件,某些时候达到89%
有没有办法找出这是哪个中间件?
我已经在 another question 中对此做出了回答,但我认为我应该在这里更深入地了解 Nest 的幕后情况。
Nest 中的路由处理程序技术上是 express 中的中间件。即
@Controller('test')
export class TestController {
@Get()
testGet() {
return 'do the thing';
}
}
Get 在幕后进行了转换(通过一些非常棒的代码)
app.get('test', (req, res, next) => {
res.send('do the thing');
})
现在当我们添加过滤器时
@Controller('test')
export class TestController {
@Get()
@UseFilter(SomeExceptionFilter)
testGet() {
return 'do the thing';
}
}
更多的奇迹发生了,我们明白了
app.get('test', (req, res, next) => {
let returnVal = '';
try {
returnVal = controller.testGet();
} catch (err) {
returnVal = someExceptionFilterInstnace.catch(err, customArgumentHostThatNestMaintains);
}
res.send(returnVal);
})
(免责声明:这不是实际发生的事情的完美 1:1 表示,因为发生了很多事情,但这应该让人们明白它最终都是中间件)
添加服务时也会发生这种情况,它们只是 express/fastify 中间件内部的方法调用,因此它们不会在 newrelic 中以很好的方式分解。
不幸的是,我不知道在 newrelic 中有什么好方法可以帮助解决这个问题,也不知道如何添加更好的注释。查看中间件的时间,您有 218 毫秒,这还不算太糟糕。很可能是某个地方的数据库操作,所以我会检查你的管道、守卫和拦截器,以及你的服务,看看你是否有任何可能的大查询。如果不出意外,您可以在本地进行一些分析并获得更多有关所用时间的原始信息