GCP 云运行作业无故失败

GCP 云运行作业无故失败

计划的 GCP 云运行作业有时会失败(大多数情况下运行正常),错误消息中没有合适的原因。它返回的唯一消息非常模糊:"Execution JOB_NAME has failed to complete, 0/1 tasks were a success."

上下文:该作业运行一个部署在 GCR 中的 docker 容器。该容器正在使用 GCP Code build 构建,由 github push 触发。

我该如何调试这个问题,或者彻底解决这个问题?

答案1

我遇到了同样的问题并且还有一些事情需要补充。

大多数情况下,我的 CloudRun 作业运行良好。我看到它们按预期开始和结束。

尽管有时它们会失败,但失败的原因并不明显。我的程序中没有引发任何异常(我知道这一点,因为我正在向第三方发送异常),而且我在 GCP 日志中也没有得到有关原因的信息。我可以通过许多失败的作业运行中受影响的数据库记录的状态来确认它经常执行我的部分代码,但我的自定义日志记录被吞没并且根本不显示。

唯一的日志消息是此系统 GCP 消息

状态:代码 13。

消息:“执行 xyz 未能完成,0/1 个任务成功。”

深入研究这个错误protoPayload -> response -> status只会发现Task xyz-task0 failed with message: Internal error.

内部错误...内部在哪里?在我的容器中,还是在 Google 中?最重要的是,我在哪里可以看到实际的错误!?

我注意到的另一个异常是我的程序突然收到 SIGTERM 信号而中断。有时它们甚至在我的程序启动之前就出现了,所以我甚至无法捕获它们,因为为时过早。

我注意到的另一件事是,即使我将作业配置为永不重试,失败的作业也会重试。maxRetries: 0有一次,初始作业运行根本没有显示在日志中,但随后重试成功并显示出来。我只是通过数据库记录的状态变化才弄清楚的。

那么,我在这里抱怨的是什么:

  • 如果我说不要重试,就不要重试
  • 不要吞掉容器的输出
  • 不要无缘无故地打断工作

我花了很多时间添加自定义日志记录以提高透明度、改进代码、点击日志(顺便说一句,日志浏览器在这方面很糟糕)、关联事物并尝试在文档中查找信息。没有什么能帮助我了解我是否可以做任何事情来让我的工作更可靠地运行。

为了测试,我启动了另一项任务,即虚拟任务。这是一个非常简单的 rake 任务,休眠 10 秒,每 2 秒记录一次状态。几个小时后,我发现即使是这项任务有时也会以完全相同的方式失败,没有任何信息痕迹。

我非常沮丧,因为我现在怀疑 CloudRun Jobs 是否仍然是适合我的工具。从技术上讲,它非常适合我的用例,但如果我不能依赖环境,那就不行了。

我很高兴被证明是错误的,但此时我看到太多“证据”表明问题出在 CloudRun Jobs 平台上。

相关内容