配置告警,让工作流每次失败时都能发出通知。
告警是保障生产系统可靠性的关键。Kestra 提供多种将告警接入工作流的方式,让你及时了解系统状态。
Notifications 插件组包含 Slack、Teams、PagerDuty 等常用平台的任务,可直接在工作流内配置告警。每个平台提供两类任务:
- Execution 任务:在通知中直接发送执行元数据,包括执行链接、ID、命名空间、工作流名、开始时间、耗时和最终状态。
- Send 任务:发送自定义消息,适用于说明某个任务或输出的状态。
本教程使用 SlackExecution 发送详细执行摘要。
errors 属性
如果直接把通知任务放在工作流中,它每次都会执行,通常不符合告警需求。将它放到 errors 块内,只有执行失败时才会触发。
像定义 tasks 一样,在 errors 下定义 SlackExecution:
errors:
- id: alert
type: io.kestra.plugin.slack.notifications.SlackExecution
channel: "#general"
url: "{{ secret('SLACK_WEBHOOK') }}"
执行失败后,Slack 中会收到带有执行详情的通知。官方页面提供了通知效果截图。
只需要失败告警时,使用 errors。如果需要针对 SUCCESS、FAILED、WARNING 等不同最终状态发送不同通知,应改用 afterExecution。
子工作流
把同一段通知代码复制到每个工作流,既重复又难维护。可以把告警逻辑移到子工作流,任何需要告警的工作流只需引用它。
将 errors 中的任务移入独立子工作流,让 errors 只负责调用它。以后只需更新一处告警逻辑,所有调用方都能受益。
包含告警逻辑的子工作流:
id: slack_alert
namespace: system
tasks:
- id: alert
type: io.kestra.plugin.slack.notifications.SlackExecution
channel: "#general"
url: "{{ secret('SLACK_WEBHOOK') }}"
父工作流只在出错时调用该子工作流:
errors:
- id: alert
type: io.kestra.plugin.core.flow.Subflow
flowId: slack_alert
namespace: system
Flow 触发器
子工作流减少了重复,但每个工作流仍要包含 errors 块。要进一步集中管理,可以使用对执行状态作出响应的 Flow 触发器。
可以针对 FAILED 或 WARNING 等状态,必要时为不同状态定义独立触发器。下面的示例通过 dependsOn.states 指定目标状态:
id: failure_alert_slack
namespace: system
tasks:
- id: send_alert
type: io.kestra.plugin.slack.notifications.SlackExecution
url: "{{ secret('SLACK_WEBHOOK') }}"
channel: "#general"
executionId: "{{ trigger.executionId }}"
triggers:
- id: on_failure
type: io.kestra.plugin.core.trigger.Flow
dependsOn:
- states: [FAILED, WARNING]
有了这些自动告警方式,就可以根据场景选择合适的集中管理程度和自定义方式。
原文:Kestra:Set Up Workflow Failure Alerts via Slack and PagerDuty。作者:Kestra 文档贡献者。Copyright 2019 Kestra Technologies. 本版本翻译正文并整理版式,保留示例 API 与配置。采用 Apache License 2.0,许可全文随稿包保留。











暂无评论内容