如何在 Vertex AI 训练作业失败(3 次尝试后)时创建日志路由器接收器?

How to create a Logs Router Sink when a Vertex AI training job failed (after 3 attempts)?

我是 运行 Vertex AI custom training job(使用自定义容器进行机器学习训练)GCP。我想在作业失败时创建一条 Pub/Sub 消息,这样我就可以 post 在 Slack 等聊天室中发送一条消息。日志文件(Cloud Logging) 看起来像这样:

{
insertId: "xxxxx"
labels: {
ml.googleapis.com/endpoint: ""
ml.googleapis.com/job_state: "FAILED"
}
logName: "projects/xxx/logs/ml.googleapis.com%2F1113875647681265664"
receiveTimestamp: "2021-07-09T15:05:52.702295640Z"
resource: {
labels: {
job_id: "1113875647681265664"
project_id: "xxx"
task_name: "service"
}
type: "ml_job"
}
severity: "INFO"
textPayload: "Job failed."
timestamp: "2021-07-09T15:05:52.187968162Z"
}

我正在使用以下查询创建日志路由器接收器:

resource.type="ml_job" AND textPayload:"Job failed" AND labels."ml.googleapis.com/job_state":"FAILED"

我面临的问题是 Vertex AI 会在宣布作业失败之前重试作业 3 次,但日志文件中的消息是相同的。下面你有 3 个例子,只有最后一个失败了 3 次的最后真的失败了。

例如,在日志文件中,我没有任何计数 ID。知道如何解决这个问题吗?创建一个 BigQuery table 来跟踪每个 resource.labels.job_id 的失败次数似乎有点矫枉过正,如果我需要在我的所有项目中这样做的话。有没有办法按 resource.labels.job_id 进行分组并在 Logs Router Sink 中计数?

日志接收器非常简单:提供一个过滤器,它会在一个 PubSub 主题中发布每个符合此过滤器的条目。没有分组依据,没有计数,什么都没有!!

我建议您结合使用基于日志的指标和云监控。

  1. 首先,在您的作业失败日志条目上创建一个log based metrics
  2. 使用以下键值创建 alert on this log based metrics
  • 设置你想要的组,例如jobID(我不知道VertexAI job的相关值是什么)
  • 当阈值等于或高于 3 时设置警报
  • 添加通知渠道并设置 PubSub 通知(仍处于测试阶段)

使用此配置,当同一 jobID 出现 3 次时,警报将仅在 PubSub 中发布一次。