如何将OpenTelemetry与NestJS+GraphQL集成?Resolver追踪缺失排查
NestJS GraphQL Resolver链路追踪名称不显示的解决方法
你当前的配置已经能捕获数据库、文件系统和HTTP调用的链路数据,但缺少Resolver名称的原因是GraphQL Instrumentation默认未开启resolver级别的追踪,调整配置即可解决:
补充GraphQL Instrumentation的关键配置
在@opentelemetry/instrumentation-graphql的配置项中添加resolvers: true,同时关闭忽略简单Resolver的选项,确保所有Resolver都被追踪:instrumentations: [ getNodeAutoInstrumentations({ '@opentelemetry/instrumentation-graphql': { allowValues: true, resolvers: true, // 启用Resolver级别的追踪 ignoreTrivialResolveSpans: false, // 不忽略简单Resolver的span depth: 2, // 可选:控制字段解析的追踪深度,按需调整 }, }), ],验证NestJS GraphQL模式配置
如果你用的是NestJS代码优先模式,确认Resolver类和方法上的@Resolver()、@Query()、@Mutation()等装饰器都正确配置,OpenTelemetry依赖这些装饰器识别Resolver标识。尝试手动注册Instrumentation(可选)
若自动Instrumentation因加载顺序问题未生效,可以禁用自动的GraphQL Instrumentation,手动实例化注册:instrumentations: [ getNodeAutoInstrumentations({ '@opentelemetry/instrumentation-graphql': false, // 禁用自动配置 }), new GraphQLInstrumentation({ allowValues: true, resolvers: true, ignoreTrivialResolveSpans: false, }), ],检查依赖版本兼容性
确保@opentelemetry/instrumentation-graphql与@nestjs/graphql使用最新稳定版,版本不匹配可能导致Resolver识别失败。
内容的提问来源于stack exchange,提问作者sahil
相关产品推荐
相关产品推荐

