如何从服务本身检索 Cloud Run 服务的名称和修订版本?

How to retrieve name and revision of a Cloud Run service, from the service itself?

提问人:jackdbd 提问时间:6/26/2022 更新时间:6/27/2022 访问量:699

问:

我正在使用错误报告来报告我的 Cloud Run 服务和 Cloud Run 作业中的任何错误。

在Node.js应用程序中,您可以像这样实例化错误报告:

const error_reporting = new ErrorReporting()

这等效于此,因为默认为 和 。logLevel2reportMode'production'

const error_reporting = new ErrorReporting({
  logLevel: 2,
  reportMode: 'production'
})

在我的错误处理程序中,我手动构造了一个错误事件,因此我可以添加一些附加信息(用户、用户代理等)。

const reportErrorAndExit = (err) => {
    const event = error_reporting.event()
    event.setMessage(err.message)
    event.setUser('the service account used by this Cloud Run service/job')


    error_reporting.report(event, () => {
      // exit with an exit code !=0 so the Cloud Run job marks
      // this particular task run as a failure
      process.exit(1)
    })
  }

使用此配置时,Cloud Run 作业中的错误会显示遇到错误的用户,但很少包含有关生成错误事件的服务的信息:

enter image description here

幸运的是,您还可以使用以下命令实例化错误报告:serviceContext

const error_reporting = new ErrorReporting({
  logLevel: 2,
  reportMode: 'production',
  serviceContext: {
    service: 'invoice-generator',
    version: 'latest'
  }
})

执行此操作时,通用服务将被更具描述性的 .nodeinvoice-generator:latest

我以为错误报告客户端将能够使用应用程序默认凭据 (ADC) 进行身份验证,并自动从其执行环境中检索服务/作业名称和修订。但显然不是。

我认为使用当前活动的 Cloud Run 服务/作业修订配置错误报告的唯一方法是从服务/作业本身检索修订。推荐的方法是什么?serviceContext

google-cloud-platform google-cloud-error-reporting

评论

1赞 guillaume blaquiere 6/26/2022
您是否尝试K_SERVICE和K_REVISION环境变量并将它们添加到错误报告配置中?cloud.google.com/run/docs/container-contract#services-env-vars
0赞 jackdbd 6/26/2022
我没有。我认为它对于 Cloud Run 服务应该没问题,但它不适用于 Cloud Run 作业。我有一个函数可以检查K_SERVICE环境变量是否存在,我发现它没有在 Cloud Run 作业中设置。我很惊讶。据我了解,Cloud Run 服务和作业是 Knative API 的“前端”略有不同。
0赞 guillaume blaquiere 6/27/2022
您是否检查了是否设置了其他环境变量?您是否检查了元数据服务器?
0赞 jackdbd 6/27/2022
如果你的意思是K_REVISION和K_CONFIGURATION,不,我还没有检查它们是否设置为Cloud Run作业。不过,将它们用于 Cloud Run 服务似乎是个好主意。

答:

2赞 guillaume blaquiere 6/27/2022 #1

使用 Cloud Run 作业,您无需进行修订,它不是 Knative 服务。

但是,我列出了所有环境变量,我得到了这个:

List all the env vars of the service

The value of "HOME" env var is: "/home"
The value of "PATH" env var is: "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
The value of "CLOUD_RUN_TASK_INDEX" env var is: "0"
The value of "CLOUD_RUN_TASK_COUNT" env var is: "1"
The value of "CLOUD_RUN_TASK_ATTEMPT" env var is: "0"
The value of "CLOUD_RUN_EXECUTION" env var is: "job-list-env-hnpq5"
The value of "CLOUD_RUN_JOB" env var is: "job-list-env"

这是我的工作的名称。您可以将其用作服务名称。您还有执行的版本;它将更改为您的所有作业运行。CLOUD_RUN_JOBCLOUD_RUN_EXECUTION

它们可能会帮助您根据需要配置错误报告。

评论

0赞 jackdbd 6/27/2022
谢谢。它看起来像我一直在寻找的。你从哪里找到这两个环境变量?Cloud Run 作业是否在与 Knative 服务不同的平台上运行?我在我的作业中看到了 YAML 配置,我认为它们在 Cloud Run 服务的同一基础架构上运行。client.knative.dev/user-image
0赞 guillaume blaquiere 6/28/2022
我只是用一个容器记录了 CLoud Run 作业的所有环境变量。Knative 没有工作管理。它应该是 Google 对当前 Knative API 的扩展,但仅由 Google 管理