一个基于Django的智能告警管理系统,用于统一处理来自多个监控系统的告警。
- 多数据源支持: 支持Prometheus/Alertmanager、Zabbix、Grafana等监控系统
- 告警分组: 自动将相关告警分组管理
- 智能去重: 基于指纹识别的告警去重机制
- 规则引擎: 灵活的规则配置,支持自定义告警处理逻辑
- 知识库: 内置知识库,提供告警处理建议
- 工作流: 支持自定义告警处理工作流
- 多种通知方式: 支持邮件、Webhook等多种通知渠道
alert-engine/
├── alert_engine/ # Django项目配置
├── alerts/ # 告警管理核心模块
├── rules/ # 规则引擎
├── knowledge/ # 知识库
├── workflows/ # 工作流管理
├── sources/ # 数据源映射
├── actions/ # 动作执行器
├── algorithms/ # 算法模块(去重、根因分析等)
└── core/ # 核心基础模块
- Python 3.8+
- Django 4.2+
- 克隆项目
git clone https://github.com/thomasgogo/alert_engine.git
cd alert_engine- 创建虚拟环境
python3 -m venv .venv source .venv/bin/activate # Linux/Mac # 或 .venv\Scripts\activate # Windows
- 安装依赖
pip install -r requirements.txt
- 配置环境变量
cp .env.example .env
# 编辑 .env 文件,配置必要的环境变量- 数据库迁移
python manage.py migrate
- 创建超级用户
python manage.py createsuperuser
- 运行开发服务器
python manage.py runserver
访问 http://127.0.0.1:8000/admin/ 进入管理后台
curl -X POST http://localhost:8000/api/sources/alertmanager/webhook/ \ -H "Content-Type: application/json" \ -d '{ "version": "4", "alerts": [{ "status": "firing", "labels": { "alertname": "HighCPU", "severity": "warning", "instance": "server01" }, "annotations": { "description": "CPU usage is above 80%" } }] }'
curl http://localhost:8000/api/alerts/events/
- AlertEvent: 单个告警事件
- AlertGroup: 告警分组
- 支持告警状态管理(firing/resolved)
- 基于条件匹配的规则系统
- 支持多种动作(邮件、Webhook等)
- 优先级和顺序控制
- 基于模式匹配的知识库
- 自动建议解决方案
- 支持标签和优先级
- 支持多种监控系统的数据格式
- 统一的数据映射层
- 可扩展的适配器模式
- 告警去重算法
- 根因分析
- 智能分组
在 .env 文件中配置:
DJANGO_DEBUG=false DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1 EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend EMAIL_HOST=smtp.gmail.com EMAIL_PORT=587 EMAIL_USE_TLS=true EMAIL_HOST_USER=your-email@gmail.com EMAIL_HOST_PASSWORD=your-password DEFAULT_FROM_EMAIL=alerts@example.com
规则支持以下条件操作符:
eq: 等于ne: 不等于gt: 大于lt: 小于contains: 包含in: 在列表中
email: 发送邮件通知webhook: 调用Webhookslack: Slack通知(需配置)sms: 短信通知(需配置)
python manage.py test使用提供的脚本导入测试数据:
python bulk_data_import.py --count 1000 --batch-size 100
python test_e2e_flow.py
欢迎提交 Issue 和 Pull Request!
MIT License
- GitHub: thomasgogo =======