Skip to content

通知

gflowd 支持在任务/系统事件发生时发送 HTTP POST webhook 和 SMTP 邮件通知。发送采用尽力而为模式。

概览

类型交付方式配置位置收件目标典型用途
WebhookHTTP POST + JSON payloadnotifications.webhooks外部服务 URL对接告警平台、自动化工作流、审计系统
全局 EmailSMTP 邮件notifications.emails固定收件人 to = [...]发给值班邮箱、团队列表、个人邮箱
单任务 EmailSMTP 邮件notifications.emails + gbatch --notify-email提交时指定的任务级收件人只给某个任务追加通知

共享开关

toml
[notifications]
enabled = true
max_concurrent_deliveries = 16
  • enabled = true:启用通知系统。
  • max_concurrent_deliveries:限制所有 webhook / email 目标共享的并发投递数。

Webhook 通知

Webhook 适合对接外部系统。每条通知会以 HTTP POST 发送 JSON payload。

toml
[[notifications.webhooks]]
url = "https://api.example.com/gflow/events"
events = ["job_completed", "job_failed", "job_timeout"] # 或 ["*"]
filter_users = ["alice", "bob"] # 可选
headers = { Authorization = "Bearer token123" } # 可选
timeout_secs = 10
max_retries = 3
  • url:接收通知的 HTTP 端点。
  • events:订阅的事件集合,或 ["*"]
  • filter_users:按任务提交者或预约创建者过滤。
  • headers:附加 HTTP 头,常用于认证。
  • timeout_secs / max_retries:单次请求超时和重试次数。

Email 通知

Email 适合直接通知人。gflow 会基于事件数据生成邮件主题和纯文本正文。

toml
[[notifications.emails]]
smtp_url = "smtps://user:pass@smtp.example.com:465"
from = "gflow <noreply@example.com>"
to = ["alice@example.com", "ml-oncall@example.com"] # 仅使用 per-job 收件人时可省略
events = ["job_failed", "job_timeout"] # 或 ["*"]
filter_users = ["alice"] # 可选
subject_prefix = "[gflow-prod]" # 可选
timeout_secs = 10
max_retries = 3
  • smtp_url:SMTP 服务器地址,使用 lettre 的 SMTP URL 语法。
  • from:发件人。
  • to:全局固定收件人;如果只打算用单任务收件人,可以省略。
  • events:订阅的事件集合,或 ["*"]
  • filter_users:按任务提交者或预约创建者过滤。
  • subject_prefix:给邮件主题加统一前缀。
  • timeout_secs / max_retries:单次发送超时和重试次数。

事件范围

事件Webhook全局 Email单任务 Email(gbatch --notify-on说明
job_submitted支持支持支持任务被提交
job_updated支持支持支持任务元数据被更新
job_started支持支持支持任务开始运行
job_completed支持支持支持任务成功结束
job_failed支持支持支持任务失败结束
job_cancelled支持支持支持任务被取消
job_timeout支持支持支持任务超时结束
job_held支持支持支持任务被置为 hold
job_released支持支持支持任务从 hold 恢复到队列
gpu_available支持支持不支持仅在 GPU 从不可用变为可用时发送
reservation_created支持支持不支持预约被创建
reservation_cancelled支持支持不支持预约被取消
scheduler_online支持支持不支持gflowd 启动完成

怎么选

如果你要把事件交给程序处理,优先用 webhook。 如果你要直接通知人,优先用 email。 如果你想订阅 GPU、预约、守护进程启动这类系统级事件,必须使用全局 webhook 或全局 email;单任务 email 只支持任务级事件。

Webhook Payload

不同事件可能省略部分字段。

json
{
  "event": "job_completed",
  "timestamp": "2026-02-04T12:30:45Z",
  "job": { "id": 42, "user": "alice", "state": "Finished" },
  "scheduler": { "host": "gpu-server-01", "version": "0.4.11" }
}

单任务 Email

单任务 email 会复用 notifications.emails 中配置的 SMTP 通道。

  • gbatch --notify-email <address> 为单个任务追加收件人。
  • gbatch --notify-on <event1,event2,...> 指定上表中的任务级触发事件。
  • 如果设置了 --notify-email 但没有设置 --notify-on,gflow 默认使用 job_completedjob_failedjob_timeoutjob_cancelled
  • 单任务通知只发 email,不会额外发送 webhook。

备注

  • events = ["*"] 表示订阅所有支持的事件。
  • smtp_url 可以写成 smtps://user:pass@smtp.example.com:465smtp://user:pass@smtp.example.com:587?tls=required,或本地明文 relay 的 smtp://localhost:25
  • max_retries 使用指数退避;系统过载时可能丢弃通知。
  • webhook payload 和 email 正文都可能包含任务元数据、用户名和时间信息。

另见

Released under the MIT License.