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

Node.js中如何将OpenTelemetry数据同时导出至OTLP端点与本地控制台?

OpenTelemetry Node.js:同时导出Metrics和Logs到控制台与OTLP端点

Metrics双导出实现

NodeSDK支持通过MultiMetricReader组合多个导出器,无需手动创建独立的MeterProvider即可实现双导出:

  • 引入ConsoleMetricExporter和MultiMetricReader
  • 分别创建控制台和OTLP对应的PeriodicExportingMetricReader
  • 用MultiMetricReader包装两个Reader,传入SDK配置

Logs双导出实现

同理,Logs可通过MultiLogRecordProcessor组合多个处理器:

  • 引入ConsoleLogExporter和MultiLogRecordProcessor
  • 分别创建控制台和OTLP对应的BatchLogRecordProcessor
  • 用MultiLogRecordProcessor包装两个处理器,传入SDK配置

修改后的完整代码

import { NodeSDK } from '@opentelemetry/sdk-node';
import { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node';
import { envDetector, processDetector, Resource } from '@opentelemetry/resources';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { SEMRESATTRS_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
import { PeriodicExportingMetricReader, ConsoleMetricExporter, MultiMetricReader } from '@opentelemetry/sdk-metrics';
import { BatchLogRecordProcessor, ConsoleLogExporter, MultiLogRecordProcessor } from "@opentelemetry/sdk-logs"; 
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';

// Traces 配置保持不变
const otlpTraceExporter = new OTLPTraceExporter({
  url: 'http://localhost:4318/v1/traces',
});

// Metrics 双导出配置
const otlpMetricExporter = new OTLPMetricExporter({
  url: 'http://localhost:4318/v1/metrics',
});
const consoleMetricExporter = new ConsoleMetricExporter();

const otlpMetricReader = new PeriodicExportingMetricReader({
  exporter: otlpMetricExporter,
  exportIntervalMillis: 1000
});
const consoleMetricReader = new PeriodicExportingMetricReader({
  exporter: consoleMetricExporter,
  exportIntervalMillis: 1000
});

// 组合两个Metric Reader
const multiMetricReader = new MultiMetricReader({
  readers: [consoleMetricReader, otlpMetricReader]
});

// Logs 双导出配置
const otlpLogExporter = new OTLPLogExporter({
  url: 'http://localhost:4318/v1/logs',
});
const consoleLogExporter = new ConsoleLogExporter();

const otlpLogProcessor = new BatchLogRecordProcessor(otlpLogExporter);
const consoleLogProcessor = new BatchLogRecordProcessor(consoleLogExporter);

// 组合两个Log Processor
const multiLogProcessor = new MultiLogRecordProcessor({
  processors: [consoleLogProcessor, otlpLogProcessor]
});

const sdk = new NodeSDK({
  resourceDetectors: [envDetector, processDetector],
  resource: new Resource({
    [SEMRESATTRS_SERVICE_NAME]: "my-service-name",
  }),
  instrumentations: [getNodeAutoInstrumentations()],
  spanProcessors: [new SimpleSpanProcessor(new ConsoleSpanExporter()), new BatchSpanProcessor(otlpTraceExporter)],
  metricReader: multiMetricReader, // 使用组合后的Metric Reader
  logRecordProcessor: multiLogProcessor, // 使用组合后的Log Processor
});

sdk.start();

关键说明

  • 完全基于NodeSDK原生API实现,无需手动创建独立的MeterProvider/LoggerProvider,保持配置简洁
  • 控制台导出器适合本地调试,Batch处理器适合生产环境的OTLP批量导出
  • 可根据需求调整exportIntervalMillis等参数,控制导出频率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:56:11