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

Spring Boot 3.3+配置OpenTelemetry导出Trace至Google Cloud Trace

解决Spring Boot 3.3+ 在GKE上通过OpenTelemetry导出Trace到Google Cloud Trace的问题

一、修正依赖配置

你的核心问题在于依赖组合错误,导致导出器无法正确加载或默认走OTLP本地端点。按以下方式调整依赖:

1. 统一OTEL版本对齐

Spring Boot 3.3.x 建议搭配 OpenTelemetry Instrumentation BOM 2.8.0+(你当前用的2.8.0是兼容的),在pom.xml中先引入BOM:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.opentelemetry.instrumentation</groupId>
            <artifactId>opentelemetry-instrumentation-bom</artifactId>
            <version>2.8.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2. 引入正确的核心依赖

不需要同时引入exporter-auto和exporter-trace,直接引入以下依赖即可:

<!-- Spring Boot OTEL自动配置 starter -->
<dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-spring-boot-starter</artifactId>
</dependency>
<!-- Google Cloud Trace 导出器 -->
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-exporter-google-cloud-trace</artifactId>
</dependency>

注意:不要引入opentelemetry-exporter-auto,它会自动启用OTLP导出器,覆盖你配置的google_cloud_trace导出器;而单独用opentelemetry-exporter-trace是旧版依赖,已经被拆分,所以会提示找不到导出器。

二、application.yaml 正确配置

确保配置中明确指定导出器,同时设置必要的资源属性和采样策略:

opentelemetry:
  traces:
    exporter: google_cloud_trace
    sampler:
      type: parentbased_traceidratio
      argument: 1.0 # 全采样,生产环境可调整比例
  resource:
    attributes:
      service.name: your-service-name # 替换为你的服务名
      service.namespace: your-namespace # 可选,对应GKE命名空间
  metrics:
    exporter: none # 如果不需要导出指标,可关闭

三、GKE 权限配置(关键)

GKE Pod需要具备访问Google Cloud Trace的权限,推荐使用Workload Identity:

  1. 创建一个Google Cloud服务账号(SA),赋予roles/cloudtrace.agent角色:
gcloud iam service-accounts create trace-agent-sa
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member "serviceAccount:trace-agent-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/cloudtrace.agent"
  1. 将GKE工作负载的Kubernetes服务账号绑定到上述Google Cloud SA:
gcloud iam service-accounts add-iam-policy-binding trace-agent-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com \
  --member "serviceAccount:YOUR_GKE_NAMESPACE.sa-kubernetes" \
  --role "roles/iam.workloadIdentityUser"
  1. 在Deployment的Pod模板中添加注解:
annotations:
  iam.gke.io/gcp-service-account: trace-agent-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com

四、验证配置

部署应用后,查看Pod日志,如果没有连接localhost:4318的报错,同时能在Google Cloud Console的Trace页面看到服务的链路数据,说明配置成功。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:17:07