You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Node.js应用添加OpenTelemetry追踪后fs.realpathSync.native失效

问题原因与解决方案

核心原因

OpenTelemetry的Node.js自动 instrumentation 机制会对fs模块做猴子补丁(monkey-patching),用来给文件系统操作生成追踪数据,但你用的这个版本组合里,补丁替换fs.realpathSync方法时,没保留原生方法上的native属性——而Next.js内部刚好直接依赖了这个属性,所以触发了TypeError。

具体细节:

  • @opentelemetry/auto-instrumentations-node会自动加载fs的 instrumentation 插件,包装realpathSync这类核心方法
  • 你使用的0.35.0版本的自动 instrumentation 插件,在包装时遗漏了对native属性的传递
  • Node.js原生fs.realpathSync确实带有native属性,Next.js的内部逻辑直接访问了这个属性,导致报错

版本兼容性说明

这是特定版本组合的兼容性bug,你用的Node.js v17.8.0 + OpenTelemetry SDK Node 0.34.0 + 自动 instrumentation 0.35.0刚好触发这个问题。后续OpenTelemetry版本已经修复了这个漏洞。

解决办法

方案1:升级OpenTelemetry依赖(推荐)

把相关依赖升级到修复后的稳定版本,比如:

{
  "@opentelemetry/api": "^1.4.1",
  "@opentelemetry/auto-instrumentations-node": "^0.37.0",
  "@opentelemetry/sdk-node": "^0.36.0"
}

升级后重新安装依赖、启动服务即可。

方案2:临时禁用fs instrumentation(应急用)

如果暂时没法升级,可以在OpenTelemetry配置里手动关掉fs的 instrumentation,避免对fs模块打补丁:

const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');

const sdk = new NodeSDK({
  instrumentations: [
    getNodeAutoInstrumentations({
      '@opentelemetry/instrumentation-fs': {
        enabled: false
      }
    })
  ]
});

注意:这么做会丢失所有文件系统操作的追踪数据,只能作为临时 workaround。

内容的提问来源于stack exchange,提问作者Jakub Koralewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:31:03