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

如何部署/v1/traces端点以接入浏览器OpenTelemetry追踪至Cloud Trace?

前端OpenTelemetry追踪接入Cloud Trace的端点问题

问题描述

我按照Google Cloud Trace的Node.js OpenTelemetry指南完成了后端追踪数据收集,现在想要添加前端栈追踪。我引入了@opentelemetry/exporter-trace-otlp-http并编写了代码,但发现前端会尝试将追踪数据发送到本地的/v1/traces端点,而这个端点没有服务监听。请问需要在这个端点部署什么才能将追踪数据接入Cloud Trace?

我的前端追踪代码如下:

import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { registerInstrumentations } from '@opentelemetry/instrumentation';
import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
import { Resource } from '@opentelemetry/resources';
import {
  ConsoleSpanExporter,
  SimpleSpanProcessor,
  WebTracerProvider,
} from '@opentelemetry/sdk-trace-web';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';

const consoleExporter = new ConsoleSpanExporter();

const collectorExporter = new OTLPTraceExporter({
  headers: {},
});

const provider = new WebTracerProvider({
  resource: new Resource({
    [SemanticResourceAttributes.SERVICE_NAME]: 'contra-web-app',
  }),
});

const fetchInstrumentation = new FetchInstrumentation({});

fetchInstrumentation.setTracerProvider(provider);

provider.addSpanProcessor(new SimpleSpanProcessor(consoleExporter));

provider.addSpanProcessor(new SimpleSpanProcessor(collectorExporter));

provider.register();

registerInstrumentations({
  instrumentations: [fetchInstrumentation],
  tracerProvider: provider,
});

export const TraceProvider = ({ children }) => {
  return <>{children}</>;
};

解决方案

你不需要自己在/v1/traces端点部署自定义服务,有两种安全可行的方式将前端追踪数据接入Cloud Trace:

1. 使用Cloud Trace专用的前端导出器

Google提供了专门针对Web前端的@google-cloud/opentelemetry-cloud-trace-exporter,它可以直接将追踪数据发送到Cloud Trace服务端,无需中间代理,且避免了前端暴露GCP密钥的风险(依赖Google客户端身份验证机制,比如GCP环境下的应用默认凭据,或用户的Google账号权限)。

修改你的代码,替换OTLP导出器:

// 导入Cloud Trace Web导出器
import { CloudTraceExporter } from '@google-cloud/opentelemetry-cloud-trace-exporter';
// 其他导入保持不变

// 替换原有的collectorExporter
const cloudTraceExporter = new CloudTraceExporter({
  projectId: '你的GCP项目ID', // 若前端部署在GCP环境(如Cloud Run、App Engine),可省略该参数,会自动获取
});

// 将导出器添加到Span处理器
provider.addSpanProcessor(new SimpleSpanProcessor(cloudTraceExporter));

2. 部署OpenTelemetry Collector作为代理

如果坚持使用OTLP导出器,需要部署OpenTelemetry Collector作为中间层:它监听前端发送的OTLP HTTP请求,然后将数据转发到Cloud Trace(Collector会安全处理GCP认证,无需在前端暴露密钥)。

步骤1:配置Collector

创建otel-collector-config.yaml配置文件:

receivers:
  otlp:
    protocols:
      http:
        endpoint: "0.0.0.0:4318" # 监听4318端口的HTTP请求

exporters:
  googlecloud:
    project: "你的GCP项目ID"
    trace:
      enabled: true

service:
  pipelines:
    traces:
      receivers: [otlp]
      exporters: [googlecloud]

步骤2:启动Collector

可以用Docker启动Collector:

docker run -p 4318:4318 -v $(pwd)/otel-collector-config.yaml:/etc/otel-collector-config.yaml otel/opentelemetry-collector-contrib:latest --config=/etc/otel-collector-config.yaml

步骤3:修改前端导出器配置

将前端的OTLP导出器指向Collector的地址:

const collectorExporter = new OTLPTraceExporter({
  url: 'http://你的Collector服务器地址:4318/v1/traces', // 替换为实际的Collector地址
  headers: {},
});

关键注意事项

不要直接让前端发送请求到Cloud Trace的官方OTLP端点:该端点需要GCP身份认证,若在前端硬编码密钥(如服务账号密钥)会导致密钥泄露,带来严重的安全风险。上述两种方案都避免了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:02:06