5分钟上手keep工作流引擎:像搭乐高一样编排告警自动化
你是否还在为分散在CloudWatch、Prometheus、Datadog的告警处理焦头烂额?当生产环境突发故障时,是不是总在重复"查日志→发通知→建工单"的机械操作?keep工作流引擎让告警编排像GitHub Actions一样简单,通过YAML配置即可串联多系统能力,将运维响应时效从小时级压缩到分钟级。
读完本文你将掌握:
- 3步完成告警→通知→工单的全流程自动化
- 如何用条件判断实现告警分级处理
- 多系统集成的实战配置模板
- 工作流调试与监控的实用技巧
工作流引擎核心概念
keep工作流引擎采用声明式配置理念,通过YAML文件定义完整的自动化逻辑。核心组件包括:
- 触发器(Triggers):定义什么条件下启动工作流,支持告警触发、定时触发、手动触发等多种方式
- 步骤(Steps):工作流的执行单元,可调用外部系统API、查询数据库或执行脚本
- 动作(Actions):定义最终执行的操作,如发送通知、创建工单或自动修复
- 条件判断:通过CEL表达式实现复杂的分支逻辑
官方文档:docs/providers/overview.md
工作流基本结构如下:
workflow:
id: 工作流唯一标识
name: 工作流名称
description: 工作流功能描述
triggers: # 触发条件
- type: alert
filters: # 过滤规则
- key: severity
value: critical
steps: # 数据处理步骤
- name: 获取客户信息
provider:
type: mysql
config: "{{ providers.mysql-prod }}"
with:
query: "SELECT * FROM customers WHERE id = '{{ alert.customer_id }}'"
actions: # 执行动作
- name: 创建工单
provider:
type: servicenow
config: "{{ providers.servicenow-prod }}"
10行代码实现CloudWatch告警转Slack通知
最简工作流示例:当AWS CloudWatch产生告警时,自动转发到Slack指定频道。
workflow:
id: cloudwatch-slack-notifier
name: CloudWatch Slack Notifier
triggers:
- type: alert
filters:
- key: source
value: cloudwatch
actions:
- name: trigger-slack
provider:
type: slack
config: "{{ providers.slack-prod }}"
with:
message: "⚠️ AWS告警: {{ alert.name }}\n{{ alert.description }}"
上述配置实现了:
- 监听来源为cloudwatch的所有告警
- 当告警触发时,通过Slack provider发送格式化消息
完整示例:examples/workflows/slack_basic.yml
进阶实战:关键告警自动分级处理
对于企业级应用,我们需要更复杂的逻辑:仅处理严重级别告警,查询客户信息进行上下文补充,并根据客户等级决定通知渠道和工单优先级。
工作流设计
完整配置示例
workflow:
id: critical-alert-enrichment
name: 关键告警自动处理流程
description: 为严重告警补充客户信息并创建ServiceNow工单
triggers:
- type: alert
filters:
- key: severity
value: critical
steps:
- name: get-customer-details
provider:
type: mysql
config: "{{ providers.mysql-prod }}"
with:
query: "select * from customers where id = '{{ alert.customer_id }}'"
single_row: true
enrich_alert: # 将查询结果附加到告警上下文
- key: customer_name
value: results.name
- key: customer_tier
value: results.tier
actions:
- name: create-servicenow-ticket
if: "not '{{ alert.ticket_id }}'" # 避免重复创建工单
provider:
type: servicenow
config: "{{ providers.servicenow-prod }}"
with:
table_name: INCIDENT
payload:
short_description: "[{{ alert.customer_name }}] {{ alert.name }}"
priority: "{{ '1' if alert.customer_tier == 'VIP' else '3' }}"
description: "{{ alert.description }}"
enrich_alert: # 将工单信息回写到告警
- key: ticket_id
value: results.sys_id
- key: ticket_url
value: results.link
这个工作流实现了:
- 仅处理严重级别(critical)的告警
- 从MySQL数据库查询客户信息并附加到告警上下文
- 根据客户等级自动设置工单优先级
- 避免重复创建工单
- 将创建的工单信息回写到告警
完整示例:examples/workflows/blogpost.yml
多系统集成能力展示
keep支持与130+种外部系统集成,覆盖监控、通知、工单、数据库等各类工具。部分常用集成包括:
- 监控系统:CloudWatch、Prometheus、Datadog、New Relic
- 通知工具:Slack、Microsoft Teams、[通讯工具]、Email(SMTP)
- 工单系统:Jira、ServiceNow、Asana、Monday
- 数据库:MySQL、PostgreSQL、MongoDB、ClickHouse
- AI能力:OpenAI、Anthropic、LiteLLM、vLLM
完整集成列表:docs/providers/overview.md
工作流部署与监控
Docker快速部署
keep提供完整的Docker部署方案,包含API服务、UI界面和工作流引擎:
git clone https://gitcode.com/GitHub_Trending/kee/keep
cd keep
docker-compose up -d
相关配置文件:
- docker-compose.yml:主部署配置
- docker-compose.dev.yml:开发环境配置
- docker-compose-with-otel.yaml:带可观测性配置
工作流监控
工作流执行状态可通过UI界面实时监控,也可配置Prometheus指标导出:
关键监控指标包括:
- 工作流执行成功率
- 平均执行时间
- 触发频率统计
- 各步骤执行耗时
最佳实践与常见问题
工作流调试技巧
- 使用手动触发:在开发阶段添加手动触发器便于测试
triggers:
- type: manual # 允许从UI手动触发
- 日志输出:添加console类型步骤打印中间变量
steps:
- name: debug
provider:
type: console
with:
message: "当前告警信息: {{ alert | to_json }}"
- 条件跳过:使用
if条件控制步骤执行
steps:
- name: only-vip
if: "{{ alert.customer_tier == 'VIP' }}"
性能优化建议
- 对高频触发的工作流使用节流控制
- 复杂查询尽量在步骤中完成而非动作中
- 合理设置超时时间避免资源占用
总结与进阶学习
通过本文介绍的工作流引擎,你已掌握告警自动化的核心能力。从简单的通知转发到复杂的跨系统编排,keep提供了与GitHub Actions类似的声明式配置体验,但专为运维监控场景优化。
进阶学习资源:
- 自定义Provider开发:docs/providers/adding-a-new-provider.mdx
- 工作流模板库:examples/workflows/
- 企业级部署指南:docs/deployment/
立即尝试将你的第一个工作流部署到生产环境,体验运维自动化的效率提升!
下期预告:使用AI能力实现告警自动分类与根因分析
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





