Keep AIOps 告警平台:10 分钟部署上手
【免费下载链接】keepThe open-source AIOps and alert management platform项目地址: https://gitcode.com/GitHub_Trending/kee/keep
凌晨三点,你被同一条数据库告警叫醒,这是今晚第四次。更糟的是,故障还同时触发了 CPU、内存、连接数告警,值班群里一片红色。Keep 是一个开源的 AIOps 告警管理平台,它把 Prometheus、Datadog、Grafana 等几十种监控工具的告警汇总到一张表里,自动去重、关联成事件,再用 YAML 工作流驱动自动化处理。这篇文章带你从一台干净机器出发,10 分钟内部署跑通,最后讲清楚生产环境要注意什么。
Keep 是什么:AIOps 告警管理平台
一句话定位
Keep 的定位是"告警的统一收件箱 + 降噪引擎 + 自动化执行器"。监控工具继续产生告警,Keep 负责把告警收进来、理清楚、再分发给对的人和系统。它不做指标采集,也不替代 Prometheus,而是站在所有监控工具之上做收敛。
解决三个具体痛点
- 告警散落各处:Prometheus 一个页面、CloudWatch 一个页面、Zabbix 又一个页面。Keep 提供统一告警列表,左侧可按严重程度、状态、负责人等维度筛选,右侧看详情,支持批量操作。
- 重复告警轰炸:同一个故障会反复产生几乎相同的告警。Keep 内置去重(Deduplication,按指纹字段把相同告警归并)机制,每个 Provider 都预置了默认去重规则。
- 告警之间没有关系:Keep 提供基于规则的相关性(Correlation)配置,把命中同一规则的告警归入同一个事件(Incident);官方云版本还提供 AI 驱动的自动关联引擎,用历史告警训练模型自动聚类。
和同类工具的关键差异
商业 AIOps 工具(如 BigPanda、ServiceNow ITOM)功能类似,但贵且配置复杂。Keep 的差异在于:完全开源、本地可部署、一切配置皆代码(Provider、工作流、规则都能用 YAML/JSON 声明式管理,可以进 Git 做版本管理和 CI/CD),并且对 LLM 时代做了原生适配——配置OPENAI_API_KEY后可以用 AI 做告警富化(给告警补充上下文)和事件总结。
从零部署 Keep 告警平台 🚀
前置环境
一台能跑 Docker 的 Linux/macOS 机器,装好 Docker 和 Docker Compose 即可,不需要预先安装数据库——默认配置用 SQLite,数据落在本地state/目录。
Docker Compose 一键部署
克隆仓库并启动全部服务(前端、后端、WebSocket 三个容器):
git clone https://gitcode.com/GitHub_Trending/kee/keep cd keep docker compose up -d默认docker-compose.yml使用AUTH_TYPE=NO_AUTH,即免登录,适合本地体验。三个服务分别监听 3000(Web 界面)、8080(API)、6001(实时推送)端口。
首次访问与必须改的配置
- 浏览器打开
http://localhost:3000,直接进入告警列表页。 - 确认容器状态:
docker compose ps应显示 3 个服务均为 running。 - 如需登录鉴权,改用
docker-compose-with-auth.yml启动,默认账号密码为 keep/keep,生产环境务必修改。 - 只有这几个变量是"必须考虑"的:
OPENAI_API_KEY(启用 AI 功能)、KEEP_DEFAULT_PASSWORD(改默认密码)、DATABASE_CONNECTION_STRING(生产切换数据库)。其余默认值可用。
# docker-compose-with-auth.yml 中的关键配置(鉴权版) services: keep-backend: environment: - AUTH_TYPE=DB - KEEP_DEFAULT_USERNAME=keep - KEEP_DEFAULT_PASSWORD=keep数据持久化在./state目录(SQLite 库和密钥都在里面),重启容器不要删这个目录。
核心功能实操 ⚡
连接第一个数据源
左侧菜单进入 Providers 页面,这里列出 100+ 可集成的监控工具、数据库和通知渠道。以 Webhook(HTTP 回调,零配置)为例走一遍:
- 点击Install Provider,搜索 Webhook。
- 填写 Provider ID(实例标识,比如
webhook-test),Webhook 类型无需任何凭据,直接安装。 - 安装完成后页面会给出回调地址:
http://localhost:8080/webhook/webhook-test。
发一条测试告警
用下面这条命令模拟监控工具推入一条 critical 级别告警(把 URL 换成你实际的 Provider 回调地址):
curl -X POST http://localhost:8080/webhook/webhook-test \ -H "Content-Type: application/json" \ -d '{"name": "disk-usage-high", "severity": "critical", "message": "disk usage > 90% on node-1", "service": "infra"}'回到 Alerts 页面,这条告警会实时出现(WebSocket 推送,不用刷新)。点进去可以看到完整字段;对 Prometheus 等工具,则配置好 Provider 后开启拉取(Pulling)即可把历史告警同步进来。
配置去重与关联规则
在设置里找到去重与相关配置:
- 去重规则:指定指纹字段(如
service+name),命中的新告警会归入已有告警并更新状态,而不是新增一行。默认已有各 Provider 的预置规则,你可以按团队字段习惯增补。 - 相关性规则:定义字段匹配条件,命中的多条告警被归入同一个 Incident,事件页能看到全部子告警和时间线。
写第一个工作流
Workflows 页面新建工作流,用 YAML 声明触发条件和动作。下面这个例子:只要出现 critical 告警就发 Slack 消息,格式与官方示例 examples/workflows/slack_basic.yml 一致:
workflow: id: critical-to-slack name: Critical 告警通知 Slack triggers: - type: alert filters: - key: severity value: critical actions: - name: send-slack provider: type: slack config: "{{ providers.slack-prod }}" with: message: "Critical: {{ alert.name }} ({{ alert.service }})"保存后工作流自动启用,下次 critical 告警进来就会执行。触发器还支持interval(定时)、webhook(外部系统调用)、manual等类型,examples/workflows/ 下有 100 多个现成示例可直接改造。
实战案例:把告警风暴压成一条通知流 🎯
业务需求:核心服务故障时,同一问题 10 分钟内产生 30 条重复告警,值班群被刷屏。目标是:相同问题只通知一次,并自动记录成一个事件。
配置过程:
- 去重规则:指纹字段设为
service+name,30 条重复告警归并为 1 条。 - 相关性规则:按
service字段关联,同一服务的告警进入同一 Incident。 - 工作流:对去重后保留的那条告警,触发 Slack 通知并创建 Jira 工单(改造 examples/workflows/create_jira_ticket_upon_alerts.yml 即可)。
最终效果:事件页展示一个 Incident 及全部子告警时间线,团队收到的是一条"支付服务故障"的聚合通知加一个工单链接,而不是 30 条刷屏消息。
生产落地要点 📋
高可用与扩缩容
生产环境不要用默认的单实例 compose 文件,改用仓库中的docker-compose-with-arq.yml:它额外引入 Redis 和 ARQ 异步 worker,把告警处理从 API 进程里剥离,避免高峰阻塞。后端要横向扩容时,DATABASE_CONNECTION_STRING必须切到 PostgreSQL(默认 SQLite 不支持多进程写),Kubernetes 部署方式参考 docs/deployment/kubernetes/。state/目录挂载持久卷,并纳入备份。
安全配置清单(不做会出事)
- 修改默认账号 keep/keep(
KEEP_DEFAULT_PASSWORD),并给KEEP_JWT_SECRET、NEXTAUTH_SECRET设强随机值。 - 反代 + TLS:3000 和 8080 端口不要直接暴露公网,仓库 proxy/ 目录有现成的 nginx/squid 参考配置。
- 保护
./state目录权限,Provider 密钥以 FILE 形式存在其中。 - 定期备份
state/(SQLite 库 + 密钥 + 工作流定义)。 - 多团队使用时开启基于角色的访问控制(RBAC),避免所有人都能改规则。
性能调优关键参数
DATABASE_CONNECTION_STRING:切 PostgreSQL 后对fingerprint、lastReceived相关查询加索引,大表查询明显变快。- 告警批量拉取间隔:Provider 的 Pulling 周期不要小于 1 分钟,减少 API 压力。
- LLM 富化按需开启:给每个告警都调一次大模型既慢又贵,建议只对 critical 级别或特定来源启用。
常见问题排查 🔧
1. 打开 localhost:3000 空白或拒绝连接
现象:页面无法访问。原因:容器未起或端口冲突。解法:
docker compose ps # 确认 3 个服务都 running docker compose logs keep-frontend ss -tlnp | grep 3000 # 检查端口是否被占用2. Webhook 发了告警但列表看不到
现象:curl 返回成功,Alerts 页没有新行。原因:Provider ID 与 URL 路径不一致,或后端处理报错。解法:核对 URL 中的 Provider ID 与安装时一致,然后docker compose logs keep-backend | tail -50找异常。
3. 重启后告警和配置全丢了
现象:docker compose down再up后数据消失。原因:删除了state/目录或未挂载。解法:确认 compose 中./state:/state卷存在,数据随该目录持久化。
4. AI 富化/总结不生效
现象:AI 功能按钮置灰或无输出。原因:OPENAI_API_KEY未注入容器。解法:启动时export OPENAI_API_KEY=sk-xxx再docker compose up -d,或在 compose 中显式配置后重建容器。
5. 前端能打开但数据加载失败
现象:界面正常,但告警、Provider 列表全是空或报错。原因:前端调用后端地址不对。解法:确认NEXT_PUBLIC_API_URL=http://localhost:8080指向本机 API 端口,浏览器网络面板里看 8080 请求是否被防火墙拦掉。
生态资源与下一步 🌐
仓库内关键入口:
- 入门与概念:docs/overview/introduction.mdx
- 全部 Provider 集成文档:docs/providers/
- 100+ 工作流示例,可直接抄:examples/workflows/
- Provider 源码(想加自家工具时参考):keep/providers/
接下来做三件事:
- 把你实际在用的监控工具(Prometheus/Grafana/Zabbix 任选一个)接进 Keep,跑通"产生告警 → 列表可见"的完整链路。
- 按团队的字段习惯加一条去重规则,观察一周告警量下降多少。
- 把"告警 → IM 通知 → 建工单"固化成一个工作流,进 Git 管理,之后改规则不用再进界面点。
【免费下载链接】keepThe open-source AIOps and alert management platform项目地址: https://gitcode.com/GitHub_Trending/kee/keep
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考