elastic APM 和 NestJS 不区分 graphql 查询
Posted
技术标签:
【中文标题】elastic APM 和 NestJS 不区分 graphql 查询【英文标题】:elastic APM and NestJS does not differentiate graphql queries 【发布时间】:2021-01-27 02:29:34 【问题描述】:我正在将 elastic-apm-node 包添加到我们的 nestjs 后端。我正在使用nestjs 的graphql 功能。正因为如此,所有请求在弹性中合并为/graphql
。
这是应该的吗?我想,既然 apollo-server-express 由 nestjs 也使用的 elastic-apm-node 支持,它应该会更好地显示它。我错过了什么吗?
更新
graphql 功能是使用 Nestjs 的文档设置的:https://docs.nestjs.com/graphql/quick-start 这基本上是我正在使用的他们推荐的设置。
【问题讨论】:
【参考方案1】:如果不确切知道您如何一起使用 NestJS 和 GraphQL,并且不知道 NestJS 本身使用 Apollo Server 的哪些部分,很难说。查看我正在使用nestjs 的graphql 功能 的一小部分示例会很有用。
这里有一些数据点可以帮助您缩小范围。此外,在代理存储库中打开an issue 或a question in their forums 可能会得到更多的关注。
Apollo 服务器的 Elastic APM 工具通过包装 apollo-server-core
模块的 runHttpQuery
函数和 marking the transaction with trans._graphqlRoute
来工作。
当代理sees this _graphqlRoute
property 时,它会运行一些代码来设置事务的默认名称
if (trans._graphqlRoute)
var name = queries.length > 0 ? queries.join(', ') : 'Unknown GraphQL query'
if (trans.req) var path = getPathFromRequest(trans.req, true)
var defaultName = name
defaultName = path ? defaultName + ' (' + path + ')' : defaultName
defaultName = operationName ? operationName + ' ' + defaultName : defaultName
trans.setDefaultName(defaultName)
trans.type = 'graphql'
在您的应用程序中,_graphqlRoute
属性没有被设置,或者上面的重命名代码做了一些奇怪的事情,或者 NestJS 出现并在使用上面的代码命名事务后重命名了事务。
更具体地了解你在做什么可以帮助人们缩小你的问题范围。
【讨论】:
更新了问题,提供了我正在使用的 graphql 设置的链接。 @theva 虽然这是一个有用的教程,但它相当大且通用——你是否碰巧在 GitHub 的某个地方有一个独立的嵌套站点/应用程序示例?以上是关于elastic APM 和 NestJS 不区分 graphql 查询的主要内容,如果未能解决你的问题,请参考以下文章
Observability:在 Elastic Observability 部署中添加免费和开放的 Elastic APM
Observability:OpenTelemetry 在 Elastic APM 中的集成
Observability:使用 Elastic APM 监控 Elastic Enterprise Search 性能
Observability:使用 Elastic APM 监控 Elastic Enterprise Search 性能