Stackdriver Spring 缺少引导有效密钥

Stackdriver Spring Boot valid key missing

我正在设置一个 spring 启动应用程序,其中的日志将发送到 google 云堆栈驱动程序。 我正在使用 Stackdriver Logging 的 logback appender 和他们文档中的 logback 文件 https://cloud.google.com/logging/docs/setup/java.

我在 Intellij 中将 GOOGLE_CLOUD_PROJECT 和 GOOGLE_APPLICATION_CREDENTIALS 添加到环境变量中。此外,我还将它们设置为 windows 中的环境变量。当我启动应用程序时,我总是得到:PERMISSION_DENIED: The request is missing a valid API key.

我安装了 gcloud,在那里我可以使用 cred 文件作为具有管理员权限的服务帐户来写入和读取日志。所以文件应该和权限一样有效。

我也尝试将密钥设置为环境变量,但这也无济于事。我错过了什么它不起作用?

我发现了问题。 GOOGLE_APPLICATION_CREDENTIALS 文件需要通过带有 credentialsFile 标签的 logback.xml 进行设置。

I added GOOGLE_CLOUD_PROJECT and GOOGLE_APPLICATION_CREDENTIALS in Intellij to the environment variables.

您确定环境变量是从 IntelliJ 获取的吗?您是否交叉检查是否使用 CLI 设置了环境变量?

如果您使用 spring-cloud-gcp-starter-logging 库进行 Stackdriver 集成,那么设置环境变量应该没问题。

来自 docs:

Due to the way logging is set up, the GCP project ID and credentials defined in application.properties are ignored.

Instead, you should set the GOOGLE_CLOUD_PROJECT and GOOGLE_APPLICATION_CREDENTIALS environment variables to the project ID and credentials private key location, respectively. You can do this easily if you’re using the Google Cloud SDK, using the gcloud config set project [YOUR_PROJECT_ID] and gcloud auth application-default login commands, respectively.

要使 Spring 启动应用程序使用 Stackdriver 日志记录,您可以将 GOOGLE_CLOUD_PROJECTGOOGLE_APPLICATION_CREDENTIALS 环境变量设置为:

export GOOGLE_CLOUD_PROJECT=`gcloud config get-value core.project`
export GOOGLE_APPLICATION_CREDENTIALS=`gcloud auth application-default login`

I installed the gcloud and there I can use the cred file as a service account with admin permissions to write and read logs.

您不应使用管理员权限。您应该使用具有 roles/logging.logWriter 和(如果需要)roles/logging.viewer 角色的服务帐户。