一个基于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 100python test_e2e_flow.py欢迎提交 Issue 和 Pull Request!
MIT License
- GitHub: thomasgogo =======