Skip to content

关于本页

本页介绍更夫所基于的开源内核 Keep 的通用能力。更夫在其上提供国内化增强:钉钉/企业微信/飞书通知、国产大模型接入、LDAP 认证与值班管理。部署与上手请看快速上手。

概述 ​

Keep 工作流引擎中的触发器定义了工作流何时执行。触发器是工作流的起点,可以配置为响应各种事件、条件或计划。

一个工作流可以有一个或多个触发器,这些触发器决定了启动工作流的具体情况。例如手动调用、基于时间的计划或事件驱动操作(如告警或事件更新)。

触发器在工作流 YAML 文件的 triggers 部分下定义。每个触发器都有一个 type 和可选的附加配置或过滤器。

支持的触发器类型 ​

手动触发器 ​

用于按需执行工作流。

yaml
triggers:
  - type: manual

间隔触发器 ​

按固定时间间隔运行工作流。

yaml
triggers:
  - type: interval
    # 每 5 秒运行一次
    value: 5

告警触发器 ​

当收到告警时执行工作流。

yaml
triggers:
  - type: alert

::: note 如果未指定过滤器或 CEL 表达式,工作流将对每个进入的告警执行。 :::

过滤告警 ​

在 Keep 中有两种过滤告警的方式:

1. 基于 CEL 的过滤(推荐) ​

Keep 使用通用表达式语言 (CEL)来过滤告警。CEL 提供了一种强大而灵活的方式,使用简单的表达式语言来表达条件。

yaml
triggers:
  - type: alert
    cel: source.contains("datadog") && severity == "critical"

常用 CEL 模式:

  • 字符串匹配:source.contains("prometheus")
  • 精确匹配:severity == "critical"
  • 多条件:source.contains("datadog") && severity == "critical"
  • 模式匹配:name.contains("error") || name.contains("failure")
  • 复杂条件:(source.contains("datadog") && severity == "critical") || (source.contains("newrelic") && severity == "error")

您可以使用 CEL Playground 来测试和实验 CEL 表达式。

2. 旧式过滤(已弃用) ​

旧的过滤机制已弃用,但仍然支持以保持向后兼容。它使用带有可选正则表达式的键值对列表。

yaml
triggers:
  - type: alert
    filters:
      - key: severity
        value: critical
      - key: source
        value: datadog
      - key: service
        value: r"(payments|ftp)"

事件触发器 ​

当事件被创建、更新或解决时运行工作流。

yaml
triggers:
  - type: incident
    on:
      - create
      - update

字段变更触发器 ​

当告警中的特定字段(如状态或严重性)发生变化时执行工作流。

yaml
triggers:
  - type: alert
    only_on_change:
      - status

总结 ​

触发器是控制工作流执行的一种强大方式,确保它们能够适当地响应手动操作、计划或事件。通过利用 CEL 表达式或过滤器,可以对工作流进行微调,使其仅在特定条件下执行。

有关 CEL表达式的更多信息,请参阅 CEL 语言定义 并在 CEL Playground 中实验表达式。

基于 MIT 协议开源的 Keep · 由更夫社区维护