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

skywalking-backend-js运行触发Buffer相关TypeError 求定位错误来源

问题根因与解决方案

错误根因

从报错栈可以定位到问题出在skywalking的链路上下文解析逻辑:

  • 你的初始化代码没有把获取到的serviceName传入agent.start方法,部分核心配置缺失导致链路解析异常
  • 你当前使用的skywalking-backend-js版本存在空值校验漏洞:当上游请求未携带sw8等链路透传头时,代码直接将undefined传入Buffer.from方法,触发类型错误
  • 少数场景下pm2自带的http metrics采集插件会和skywalking的HttpPlugin产生冲突,导致请求头读取异常

修复方案

1. 补全agent初始化配置

修改初始化代码,把服务名等核心配置传入启动方法:

import agent from 'skywalking-backend-js';

export class M7Skywalking {
  static tryLoad(serviceName: string) {
    const swAgentName = process.env.SW_AGENT_NAME || serviceName;
    if (!swAgentName) {
      return;
    }
    agent.start({
      // 传入服务名配置
      serviceName: swAgentName,
      // 传入skywalking采集端地址,也可以通过SW_AGENT_COLLECTOR_BACKEND_SERVICES环境变量配置
      collectorAddress: process.env.SW_AGENT_COLLECTOR_BACKEND_SERVICES || '127.0.0.1:11800'
    });
  }
}

2. 升级依赖修复版本bug

官方已经在后续版本补充了空链路头的校验逻辑,直接升级到最新稳定版即可解决问题:

npm install skywalking-backend-js@latest
# 或使用yarn
yarn add skywalking-backend-js@latest

3. 临时规避方案(无需升级依赖)

如果当前项目不方便升级依赖,可以手动修改源码补全非空判断:
找到路径node_modules/skywalking-backend-js/src/trace/context/ContextCarrier.ts中的decode方法,在开头新增非空判断:

decode(input) {
  // 新增空值校验逻辑
  if (!input) return ''
  // 原有逻辑保持不变
  return Buffer.from(input, 'base64').toString()
}

4. 排查插件冲突

如果使用pm2部署项目,可以先关闭pm2的http metrics采集功能,验证是否是插件冲突导致的请求头读取异常。


内容的提问来源于stack exchange,提问作者Ethan Hunt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:57:02