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:
- 创建一个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"
- 将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"
- 在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
相关产品推荐
相关产品推荐

