弹性APM和NestJS不能区分graphql查询

问题描述

我正在将elastic-apm-node软件包添加到我们的nestjs后端。我正在使用nestjs的graphql功能。因此,所有请求都以弹性的/graphql合并在一起。

这是应该的样子吗?我以为,由于apollo-server-express受elastic-apm-node支持,而nestjs也使用它,因此它应该显示得更好。我想念什么吗?

更新

graphql功能是使用nestjs的文档设置的:https://docs.nestjs.com/graphql/quick-start基本上是我正在使用的推荐设置。

解决方法

很难确切地说出您到底是如何一起使用NestJS和GraphQL,也不知道NestJS本身使用了Apollo Server的哪些部分。看看我正在使用nestjs的graphql功能的小样会有用。

以下一些数据点可能会帮助您缩小范围。另外,在Agent信息库或an issue中打开a question in their forums可能会引起更多的注意。

用于Apollo Server的Elastic APM工具通过包装runHttpQuery模块的apollo-server-core函数和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有关的事情,并在使用上面的代码命名后重新命名了事务。

更具体地了解您正在做什么将帮助人们缩小问题范围。