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

Golang项目如何将生成的Traces发送至OpenTelemetry Collector

Golang应用通过OpenTelemetry Collector上报Trace到NewRelic配置流程

你已经完成代码埋点且能在终端打印Trace,说明核心埋点逻辑无问题,仅需调整导出配置、部署配置Collector即可完成链路打通,具体步骤如下:

1. 调整Golang应用侧的Trace导出配置

将当前使用的控制台Trace导出器替换为OTLP导出器,把Trace数据发送到Collector服务:

  • 安装OTLP导出相关依赖
go get go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@latest
go get go.opentelemetry.io/otel/sdk@latest
go get go.opentelemetry.io/otel/semconv/v1.24.0@latest
  • 调整Tracer初始化逻辑,替换原有控制台导出器为OTLP导出器,核心初始化代码参考:
func initTracer() func(context.Context) error {
	// 初始化OTLP gRPC导出器,指向Collector的监听地址
	exporter, err := otlptracegrpc.New(context.Background(),
		otlptracegrpc.WithEndpoint("127.0.0.1:4317"),
		otlptracegrpc.WithInsecure(), // 本地测试无TLS时开启,生产环境请配置证书并移除该选项
	)
	if err != nil {
		log.Fatalf("OTLP导出器初始化失败: %v", err)
	}

	// 配置服务资源属性,必须指定服务名,否则NewRelic侧无法识别服务
	res, err := resource.New(context.Background(),
		resource.WithAttributes(
			semconv.ServiceNameKey.String("替换为你的实际服务名"),
		),
	)
	if err != nil {
		log.Fatalf("资源配置初始化失败: %v", err)
	}

	// 注册全局TracerProvider
	tp := sdktrace.NewTracerProvider(
		sdktrace.WithBatcher(exporter), // 用批量处理器提高上报效率
		sdktrace.WithResource(res),
	)
	otel.SetTracerProvider(tp)
	return tp.Shutdown
}
  • 在服务启动入口调用初始化方法,例如在main函数开头添加:
shutdownTracer := initTracer()
defer shutdownTracer(context.Background()) // 服务退出时兜底把剩余Trace上报完

2. 配置并启动OpenTelemetry Collector

Collector负责接收应用上报的Trace,处理后转发到NewRelic平台,配置分为三个核心模块:接收器、处理器、导出器。

  • 新建配置文件otel-collector-config.yaml,内容参考:
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317 # 接收应用gRPC协议上报的Trace
      http:
        endpoint: 0.0.0.0:4318 # 接收应用HTTP协议上报的Trace

processors:
  batch:
    timeout: 1s
    send_batch_size: 1024 # 批量聚合Trace后上报,降低请求开销

exporters:
  otlp:
    endpoint: otlp.nr-data.net:4317 # NewRelic官方OTLP接入端点
    headers:
      api-key: 替换为你NewRelic账号的Ingest License Key
  logging:
    loglevel: debug # 调试阶段开启,打印Collector接收到的Trace,验证通过后可移除

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [logging, otlp]
  • 用Docker快速启动Collector(推荐使用contrib版本,自带所有官方组件无需额外安装):
docker run -d \
  -p 4317:4317 \
  -p 4318:4318 \
  -v $(pwd)/otel-collector-config.yaml:/etc/otelcol/config.yaml \
  --name otel-collector \
  otel/opentelemetry-collector-contrib:latest

3. 连通性验证

  • 查看Collector运行日志,确认无端口监听、配置加载错误。
  • 启动Golang应用,触发若干带Trace的业务请求,查看Collector日志,如果能看到接收到的Trace内容,说明应用到Collector的链路正常。
  • 等待1-2分钟后登录NewRelic后台,进入Trace查询页面即可看到上报的链路数据。

常见问题排查

  • 如果Collector收不到Trace:检查应用配置的Collector地址是否正确、防火墙是否放通对应端口、Collector是否正常监听0.0.0.0而非仅127.0.0.1。
  • 如果Collector收到Trace但NewRelic看不到数据:检查配置的api-key是否为NewRelic的Ingest类型密钥、Collector所在服务器是否能正常访问NewRelic接入端点、是否开启了网络代理拦截请求。
  • 生产环境部署时记得移除导出器配置里的WithInsecure()选项,配置TLS证书加密传输链路数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:18:24