【问题标题】:elastic APM and NestJS does not differentiate graphql querieselastic APM 和 NestJS 不区分 graphql 查询
【发布时间】: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 这基本上是我正在使用的他们推荐的设置。

【问题讨论】:

    标签: graphql nestjs apollo-server apm elastic-apm


    【解决方案1】:

    如果不确切知道您如何一起使用 NestJS 和 GraphQL,并且不知道 NestJS 本身使用 Apollo Server 的哪些部分,很难说。查看我正在使用nestjs 的graphql 功能 的一小部分示例会很有用。

    这里有一些数据点可以帮助您缩小范围。此外,在代理存储库中打开an issuea 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 的某个地方有一个独立的嵌套站点/应用程序示例?
    猜你喜欢
    • 2020-07-20
    • 2020-01-07
    • 2019-07-05
    • 2022-12-19
    • 2020-10-21
    • 2018-06-26
    • 1970-01-01
    • 2022-09-29
    • 2021-06-13
    相关资源
    最近更新 更多