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

创建tracing.ts文件遇类型错误:SimpleSpanProcessor无法赋值给SpanProcessor

类型不兼容错误排查:Type 'SimpleSpanProcessor' is not assignable to type 'SpanProcessor'

问题场景

创建tracing.ts时遇到类型不兼容错误,提示:Type 'SimpleSpanProcessor' is not assignable to type 'SpanProcessor'。

现有代码

import {
  BatchSpanProcessor,
  SimpleSpanProcessor,
} from '@opentelemetry/sdk-trace-base';
import { api, NodeSDK } from '@opentelemetry/sdk-node';
import * as process from 'process';
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
import { ExpressInstrumentation } from '@opentelemetry/instrumentation-express';
import { NestInstrumentation } from '@opentelemetry/instrumentation-nestjs-core';
import { JaegerExporter } from '@opentelemetry/exporter-jaeger';
import { Resource } from '@opentelemetry/resources';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
import * as dotenv from 'dotenv';
import { B3Propagator } from '@opentelemetry/propagator-b3';

dotenv.config();

const jaegerExporter = new JaegerExporter({
  endpoint: 'http://localhost:14268/api/traces',
});

// 注:原代码中oltpExporter未定义,需补充初始化
const oltpExporter = new OTLPTraceExporter({
  endpoint: 'http://your-otlp-endpoint:4318/v1/traces',
});

const traceExporter =
  process.env.NODE_ENV === `development` ? jaegerExporter : oltpExporter;

const spanProcessor =
  process.env.NODE_ENV === `development`
    ? new SimpleSpanProcessor(traceExporter)
    : new BatchSpanProcessor(traceExporter);


export const otelSDK = new NodeSDK({
  resource: new Resource({
    [SemanticResourceAttributes.SERVICE_NAME]: `nestjs-otel`,
  }),
  spanProcessor,
  instrumentations: [
    new HttpInstrumentation(),
    new ExpressInstrumentation(),
    new NestInstrumentation(),
  ],
});

// 进程退出时优雅关闭SDK
process.on('SIGTERM', () => {
  otelSDK
    .shutdown()
    .then(
      () => console.log('SDK shut down successfully'),
      (err) => console.log('Error shutting down SDK', err),
    )
    .finally(() => process.exit(0));
});

现有依赖配置

{
  "dependencies": {
    "@opentelemetry/auto-instrumentations-node": "^0.36.0",
    "@opentelemetry/exporter-jaeger": "^1.9.0",
    "@opentelemetry/exporter-trace-otlp-proto": "^0.35.0",
    "@opentelemetry/instrumentation-express": "^0.32.0",
    "@opentelemetry/instrumentation-http": "^0.35.0",
    "@opentelemetry/instrumentation-nestjs-core": "^0.32.0",
    "@opentelemetry/propagator-b3": "^1.9.0",
    "@opentelemetry/resources": "^1.9.0",
    "@opentelemetry/sdk-node": "^0.35.0",
    "@opentelemetry/sdk-trace-base": "^1.9.0",
    "@opentelemetry/semantic-conventions": "^1.9.0",
    "dotenv": "^16.0.3"
  }
}

问题原因

核心问题是OpenTelemetry相关包版本不兼容:

  • @opentelemetry/sdk-node 使用旧版本 0.35.0
  • @opentelemetry/sdk-trace-base 使用新版本 1.9.0

两个版本的SpanProcessor类型定义不一致,导致类型匹配失败。OpenTelemetry在1.0版本后,核心SDK包(如sdk-node、sdk-trace-base)必须保持版本一致才能保证类型兼容。

解决方案

步骤1:统一所有OpenTelemetry包的版本

将所有@opentelemetry开头的包版本对齐,推荐使用1.x系列稳定版本(如1.9.0),修改后的package.json依赖如下:

{
  "dependencies": {
    "@opentelemetry/auto-instrumentations-node": "^0.36.0",
    "@opentelemetry/exporter-jaeger": "^1.9.0",
    "@opentelemetry/exporter-trace-otlp-proto": "^1.9.0",
    "@opentelemetry/instrumentation-express": "^0.33.0",
    "@opentelemetry/instrumentation-http": "^0.35.1",
    "@opentelemetry/instrumentation-nestjs-core": "^0.33.0",
    "@opentelemetry/propagator-b3": "^1.9.0",
    "@opentelemetry/resources": "^1.9.0",
    "@opentelemetry/sdk-node": "^1.9.0",
    "@opentelemetry/sdk-trace-base": "^1.9.0",
    "@opentelemetry/semantic-conventions": "^1.9.0",
    "dotenv": "^16.0.3"
  }
}

步骤2:修复代码中的未定义变量

补充oltpExporter的初始化逻辑,根据实际OTLP服务端点配置参数。

步骤3:重新安装依赖

执行命令更新依赖:

npm install
# 或使用yarn
yarn install

额外说明

  • OpenTelemetry包版本关联性强,核心SDK、工具库、导出器等尽量保持同版本,避免类型或运行时错误。
  • 若需使用旧版本(如0.35.x),则需将sdk-trace-base降级到0.35.0,同时确保其他配套包版本匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:15:04