跳到主要内容

导出器设置

介绍

在分布式系统中,导出器(Exporter)是将遥测数据(如追踪、指标、日志)从应用程序发送到后端系统(如Jaeger、Prometheus)的关键组件。OpenTelemetry和Jaeger提供了多种导出器选项,允许开发者灵活地选择数据存储和分析方式。

备注

关键概念:导出器负责将收集的遥测数据转换为特定格式,并通过网络或本地方式传输到目标系统。


导出器类型

OpenTelemetry支持以下主要导出器类型:

  1. Jaeger Exporter:将数据发送到Jaeger后端。
  2. OTLP Exporter(OpenTelemetry Protocol):通用协议,支持多种后端。
  3. 控制台导出器:将数据输出到终端(用于调试)。

配置基础

1. Jaeger导出器示例

以下是一个将追踪数据发送到Jaeger的Node.js示例:

const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');

const provider = new NodeTracerProvider();

// 配置Jaeger导出器
const exporter = new JaegerExporter({
endpoint: 'http://localhost:14268/api/traces',
});

provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();
提示

确保Jaeger后端服务已运行,且endpoint地址正确。

2. OTLP导出器示例

OTLP是OpenTelemetry的推荐协议:

const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');

const otlpExporter = new OTLPTraceExporter({
url: 'http://collector:4318/v1/traces',
});

进阶配置

批量处理(Batching)

为提高性能,OpenTelemetry默认使用批量导出:

const { BatchSpanProcessor } = require('@opentelemetry/sdk-trace-base');

provider.addSpanProcessor(
new BatchSpanProcessor(exporter, {
maxQueueSize: 1000, // 队列中最大Span数量
scheduledDelayMillis: 5000, // 每5秒导出一次
})
);

实际案例:电商系统监控

假设你需要监控一个电商系统的订单流程:

  1. 需求:将追踪数据同时发送到Jaeger(用于调试)和云端OTLP收集器(用于生产分析)。
  2. 解决方案:配置多个导出器:
const { CompositeSpanProcessor } = require('@opentelemetry/sdk-trace-base');

const jaegerExporter = new JaegerExporter({ /* 配置 */ });
const otlpExporter = new OTLPTraceExporter({ /* 配置 */ });

provider.addSpanProcessor(
new CompositeSpanProcessor([jaegerExporter, otlpExporter])
);

常见问题

注意

问题:数据未出现在Jaeger UI中?
排查步骤

  1. 检查导出器endpoint是否可达
  2. 验证后端服务是否运行
  3. 查看控制台是否有错误日志

总结

  • 导出器是遥测数据流水线的最后一环
  • Jaeger导出器适合本地开发,OTLP导出器适合生产环境
  • 批量处理能显著提升性能