Skip to content

关于本页

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

Keep 工作流支持告警增强,这是一项强大的功能,允许您使用额外的数据增强告警,使其更具可操作性和意义。增强功能可以直接从您的工作流中向告警添加自定义字段或修改现有字段。


为什么需要增强告警? ​

  • 提供上下文: 添加关键信息,如相关客户数据或工单 ID。
  • 实现自动化: 在后续操作中使用增强的字段进行动态处理。
  • 提高可见性: 显示基本元数据以便更好地决策。

如何增强告警 ​

使用 enrich_alert 指令 ​

enrich_alert 指令用于在动作中添加或更新告警中的字段。您可以指定键值对列表,其中:

  • key 是要添加或更新的字段名。
  • value是要分配给字段的数据。它可以是静态值,也可以从步骤或工作流的其他部分动态派生。
  • disposable 是一个可选属性,决定增强是否临时的,以及在收到新告警时是否应丢弃。如果 disposable 设置为 True,增强被添加到 disposable_enrichments 并标记为 dispose_on_new_alert=True。

带增强的工作流示例 ​

yaml
workflow:
  id: enrich-alert-example
  description: Demonstrates enriching alerts
  triggers:
    - type: alert
  steps:
    - name: get-customer-details
      provider:
        type: mysql
        config: "{{ providers.mysql-prod }}"
        with:
          query: "SELECT * FROM customers WHERE customer_id = '{{ alert.customer_id }}'"
          single_row: true
  actions:
    - name: enrich-alert-with-customer-data
      provider:
        type: mock
        with:
          enrich_alert:
            - key: customer_name
              value: "{{ steps.get-customer-details.results.name }}"
            - key: customer_tier
              value: "{{ steps.get-customer-details.results.tier }}"

在此示例中:

  • get-customer-details 步骤根据告警获取客户数据。
  • enrich_alert 指令将 customer_name 和 customer_tier 添加到告警。

增强语法 ​

键值对 ​

每个增强都定义为键值对:

yaml
enrich_alert:
  - key: field_name
    value: field_value
    disposable: true
  • 静态值: 对简单的增强使用静态字符串或数字:
yaml
- key: alert_source
  value: "Monitoring System"

-- 动态值: 使用从步骤、动作或告警本身派生的值:

yaml
- key: severity_level
  value: "{{ alert.severity }}"

条件增强 ​

您可以将增强与条件结合使用以动态增强告警:

yaml
actions:
  - name: enrich-critical-alert
    if: "{{ alert.severity == 'critical' }}"
    provider:
      type: mock
      with:
        enrich_alert:
          - key: priority
            value: high

高级用例 ​

使用动作结果增强告警 ​

增强可以使用动作的结果,允许基于先前步骤进行动态更新:

yaml
enrich_alert:
  - key: ticket_id
    value: "{{ actions.create-ticket.results.ticket_id }}"
  - key: ticket_url
    value: "{{ actions.create-ticket.results.ticket_url }}"

增强工作流示例 ​

此示例演示如何用 ServiceNow 的工单详情增强告警:

yaml
workflow:
  id: servicenow-ticket-enrichment
  triggers:
    - type: alert
  steps:
    - name: fetch-alert-details
      provider:
        type: keep
        with:
          filter: "alert_id == '{{ alert.id }}'"
  actions:
    - name: create-servicenow-ticket
      provider:
        type: servicenow
        config: "{{ providers.servicenow }}"
        with:
          table_name: INCIDENT
          payload:
            short_description: "Alert: {{ alert.name }}"
            description: "{{ alert.description }}"
      enrich_alert:
        - key: ticket_id
          value: "{{ results.sys_id }}"
        - key: ticket_url
          value: "{{ results.link }}"

故障排除增强 ​

在没有告警/事件的情况下增强 ​

如果触发器中不存在告警/事件(例如间隔触发器或工作流页面中的手动调用),则增强规则将没有可应用的告警/事件。增强过程通常需要存在告警/事件才能应用指定的增强。没有告警/事件,增强规则将无法按预期执行。解决方法是使用 foreach 指令并传递包含 "fingerprint" 变量的对象。

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