通过 Slack 与 PagerDuty 设置工作流失败告警

配置告警,让工作流每次失败时都能发出通知。

告警是保障生产系统可靠性的关键。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,许可全文随稿包保留。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容