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

本地Spring Boot对接GCP Logging/Tracing遇503 UNAVAILABLE错误求助

Spring Boot + Spring Cloud GCP:本地环境调用Cloud Logging/Tracing gRPC接口返回503 UNAVAILABLE(NoRouteToHostException)

我是GCP新手,正在为Spring Boot项目配置Cloud Logging和Cloud Tracing,使用Spring Cloud GCP相关库实现。本地开发环境已设置GOOGLE_APPLICATION_CREDENTIALS环境变量,服务账号也拥有正确的写入权限。

已通过gcloud CLI确认API已启用:

gcloud services enable cloudtrace.googleapis.com
gcloud services enable logging.googleapis.com

且gcloud CLI插入日志功能正常,但应用调用gRPC接口时返回503 UNAVAILABLE,核心错误为java.net.NoRouteToHostException。


相关配置与日志

application.properties

spring.cloud.gcp.logging.enabled=true
spring.cloud.gcp.trace.enabled=true
stackdriver.log.name=service.log
spring.cloud.gcp.credentials.scopes=DEFAULT_SCOPES,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/logging.admin,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/trace.append

management.tracing.sampling.probability=1.0

应用报错日志

io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
    at io.grpc.Status.asRuntimeException(Status.java:535)
    at zipkin2.reporter.stackdriver.internal.AwaitableUnaryClientCallListener.onClose(AwaitableUnaryClientCallListener.java:100)
    at io.grpc.internal.DelayedClientCall$DelayedListener$3.run(DelayedClientCall.java:463)

Caused by: io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedNoRouteToHostException: No route to host: cloudtrace.googleapis.com/2404:6800:4007:81c:0:0:0:200a:443
Caused by: java.net.NoRouteToHostException: No route to host
    at sun.nio.ch.Net.connect0(Native Method)
    at sun.nio.ch.Net.connect(Net.java:482)
    at sun.nio.ch.Net.connect(Net.java:474)

java.lang.RuntimeException: com.google.cloud.logging.LoggingException: io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
    at com.google.cloud.logging.LoggingImpl$9.onFailure(LoggingImpl.java:943)
    at com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:68)
    at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1132)

Caused by: io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedNoRouteToHostException: No route to host: logging.googleapis.com/2001:4860:4802:32:0:0:0:174:443
Caused by: java.net.NoRouteToHostException: No route to host
    at sun.nio.ch.Net.connect0(Native Method)

logback-spring.xml

<configuration>
    <include resource="com/google/cloud/spring/logging/logback-appender.xml" />
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <include resource="com/google/cloud/spring/logging/logback-json-appender.xml" />
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="STACKDRIVER" />
    </root>
</configuration>

pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.8</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


<properties>
        <java.version>1.8</java.version>
        <spring-cloud-gcp.version>3.2.0</spring-cloud-gcp.version>
        <spring-cloud.version>2021.0.1</spring-cloud.version>
    </properties>

<dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>spring-cloud-gcp-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>spring-cloud-gcp-starter-logging</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>spring-cloud-gcp-starter-trace</artifactId>
        </dependency>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>spring-cloud-gcp-dependencies</artifactId>
                <version>${spring-cloud-gcp.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

解决方案

从报错日志的NoRouteToHostException可以确定,问题核心是本地网络无法路由到GCP的gRPC服务IPv6端点,而非权限或API启用问题(gcloud CLI正常工作已验证这两点)。以下是针对性的排查修复步骤:

1. 强制使用IPv4解析

日志中显示应用尝试连接GCP服务的IPv6地址,很多本地网络环境不支持IPv6,导致路由失败。在启动Spring Boot应用时添加JVM参数强制使用IPv4:

java -Djava.net.preferIPv4Stack=true -jar your-app.jar

如果使用IDE运行,可在VM参数中添加该配置。

2. 配置代理(若处于代理环境)

如果本地网络需要通过代理访问外部服务,gcloud CLI可能已配置代理,但Spring Boot应用未继承该设置。添加代理相关JVM参数:

java -Dhttp.proxyHost=your-proxy-host -Dhttp.proxyPort=your-proxy-port -Dhttps.proxyHost=your-proxy-host -Dhttps.proxyPort=your-proxy-port -jar your-app.jar

也可在application.properties中配置Spring Cloud GCP的代理参数:

spring.cloud.gcp.logging.proxy.host=your-proxy-host
spring.cloud.gcp.logging.proxy.port=your-proxy-port
spring.cloud.gcp.trace.proxy.host=your-proxy-host
spring.cloud.gcp.trace.proxy.port=your-proxy-port

3. 验证网络连通性

手动测试本地网络能否访问GCP服务端点:

  • 解析域名到IPv4:ping logging.googleapis.com(确保输出的是IPv4地址)
  • 测试端口连通性:telnet logging.googleapis.com 443
    如果测试失败,检查本地防火墙、杀毒软件是否拦截了出站请求,或联系网络管理员开放相关域名的443端口访问权限。

4. 简化凭证范围配置

当前配置的spring.cloud.gcp.credentials.scopes包含重复权限,DEFAULT_SCOPES已经涵盖了Cloud Logging和Tracing所需的logging.write、trace.append等权限,简化配置避免潜在冲突:

spring.cloud.gcp.credentials.scopes=DEFAULT_SCOPES

5. 升级Spring Cloud GCP依赖版本

尝试升级到Spring Cloud GCP 3.2.x系列的最新补丁版(如3.2.5),修复可能存在的gRPC客户端网络兼容性问题:

<properties>
    <spring-cloud-gcp.version>3.2.5</spring-cloud-gcp.version>
</properties>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:52:15