-
Notifications
You must be signed in to change notification settings - Fork 0
Home
本项目是一个面向企业运维与监控场景的 Webhook 接收与 AI 智能分析服务,旨在帮助团队实现“自动化告警处理、智能降噪、重复告警去重、自动转发”等关键能力。通过对接多种开源生态(如 Prometheus、Grafana、PagerDuty、Datadog 等)与第三方通知平台(如飞书机器人),系统能够在收到外部系统告警后,自动进行 AI 分析、去重与转发,显著降低告警噪音、提升响应效率。
Webhook 是一种基于 HTTP 的回调机制:当某个事件发生时,源系统会向预先配置的 URL 发送一次 HTTP 请求(通常是 POST),携带事件数据。在运维与监控领域,Webhook 常用于将告警、事件流等数据推送到下游系统进行处理。本项目即提供一个可扩展的 Webhook 接收与处理服务,支持签名验证、AI 分析、去重与转发。
- 自动化告警处理:接收多来源 Webhook,自动解析、分析与持久化,减少人工干预。
- 智能降噪与根因分析:在短时间窗口内关联相似告警,识别衍生告警并抑制转发,避免重复通知。
- 重复告警去重:基于关键字段生成唯一哈希,在可配置时间窗口内识别重复告警,复用历史分析结果。
- 自动转发与可视化:根据重要性与规则自动转发到飞书等平台;提供 Web 管理界面查看历史与分析结果。
- 灵活配置与可扩展:支持环境变量与 API 动态配置,Prompt 模板可热加载,适配不同场景。
- 云监控告警(Prometheus/Grafana/PagerDuty/Datadog 等)接入与统一处理。
- 多系统事件聚合与 AI 智能分析,辅助快速定位问题与给出处置建议。
- 高频重复告警场景下的降噪与周期性提醒,平衡通知及时性与噪音控制。
- 与飞书等即时通讯平台集成,实现高风险事件的自动通知。
- 告警风暴与重复通知导致的“通知疲劳”,影响值班效率。
- 告警来源多样、格式不一,缺乏统一处理与分析。
- 传统规则难以覆盖复杂场景,需要引入 AI 辅助判断重要性与处置建议。
- 缺乏可视化与可配置的管理界面,运维成本高。
- 高可用与可扩展:基于 FastAPI + PostgreSQL + Redis,支持容器化部署与水平扩展。
- 强一致与并发安全:通过数据库行级锁与分布式锁,解决并发重复告警竞态问题。
- 成本可控:支持 AI 分析缓存、规则降级与可配置的转发策略,降低 API 费用。
- 可观测与可治理:内置 AI 使用日志、分析缓存统计、转发状态跟踪与健康检查接口。
- v2.1.0(2026-02-28):新增超时间窗口后行为独立配置(是否重新分析、是否转发),支持更灵活的成本与准确性平衡。
- v2.0.0(2025-11-07):新增可配置的重复告警去重功能与自定义时间窗口,完善 API 配置管理。
- v1.0.0(2025-XX-XX):首次发布,提供 Webhook 接收、AI 分析、自动转发与 Web 界面。
本项目采用 MIT 许可证,允许自由使用、修改与分发,需在衍生作品中保留版权与许可声明。
项目采用“核心服务 + 路由模块 + 业务服务 + 配置与模型”的分层组织方式,便于维护与扩展。
graph TB
subgraph "入口与配置"
M["main.py<br/>应用入口"]
CFG["core/config.py<br/>配置管理"]
end
subgraph "核心服务"
APP["core/app.py<br/>FastAPI 应用与处理流程"]
MODELS["core/models.py<br/>数据库模型"]
UTILS["core/utils.py<br/>工具函数去重、签名等"]
end
subgraph "AI 与降噪"
AI["services/ai_analyzer.py<br/>AI 分析与缓存"]
NOISE["services/alert_noise_reduction.py<br/>智能降噪与根因分析"]
end
subgraph "适配与生态"
ADAPTER["adapters/ecosystem_adapters.py<br/>生态适配器"]
OPENCLAW["services/openclaw_*<br/>深度分析集成"]
end
subgraph "部署与运行"
DF["Dockerfile"]
DC["docker-compose.yml"]
REQ["requirements.txt"]
end
M --> APP
APP --> CFG
APP --> MODELS
APP --> UTILS
APP --> AI
APP --> NOISE
APP --> ADAPTER
APP --> OPENCLAW
DF --> M
DC --> M
REQ --> M
图表来源
- main.py:1-42
- core/app.py:1-120
- core/config.py:1-176
- services/ai_analyzer.py:1-120
- services/alert_noise_reduction.py:1-120
- core/models.py:1-120
- Dockerfile:1-69
- docker-compose.yml:1-111
章节来源
- README.md:500-572
- main.py:1-42
- core/app.py:1-120
- core/config.py:1-176
- Dockerfile:1-69
- docker-compose.yml:1-111
- Webhook 接收与处理:统一入口解析请求、校验签名、标准化数据、生成告警哈希、并发锁控制、AI 分析、去重与转发决策。
- AI 分析与缓存:基于 OpenAI API 的智能分析,支持 Prompt 模板热加载、缓存命中与成本统计。
- 智能降噪与根因分析:在时间窗口内关联相似告警,识别衍生告警并抑制转发,支持风暴检测与置信度评分。
- 数据持久化与可视化:PostgreSQL 存储事件与分析结果,提供 Web 界面与 API 查看历史与统计。
- 配置与规则:支持环境变量与 API 动态配置,转发规则可按来源、重要性与重复状态灵活匹配。
章节来源
- core/app.py:683-800
- services/ai_analyzer.py:650-764
- services/alert_noise_reduction.py:213-293
- core/models.py:22-121
- README.md:227-346
系统采用“请求进入 → 解析与校验 → 去重与锁 → AI 分析 → 降噪与规则 → 转发与持久化 → 响应返回”的闭环流程。并发场景通过 Redis 分布式锁与数据库行级锁协同保障一致性。
sequenceDiagram
participant Client as "外部系统"
participant App as "Webhook 接收服务(core/app.py)"
participant Lock as "并发锁(processing_lock)"
participant AI as "AI 分析(services/ai_analyzer.py)"
participant Noise as "降噪(services/alert_noise_reduction.py)"
participant DB as "数据库(PostgreSQL)"
participant Rule as "转发规则(core/models.py)"
participant Forward as "自动转发"
Client->>App : "POST /webhook"
App->>App : "解析请求/校验签名/标准化数据"
App->>Lock : "获取处理锁(alert_hash)"
alt "获取锁成功"
App->>AI : "AI 分析(可命中缓存)"
AI-->>App : "分析结果"
App->>Noise : "智能降噪与根因分析"
Noise-->>App : "降噪决策"
App->>DB : "保存事件/去重/转发状态"
App->>Rule : "匹配转发规则"
Rule-->>App : "匹配结果"
App->>Forward : "按规则与重要性转发"
Forward-->>App : "转发状态"
App-->>Client : "统一响应"
else "获取锁失败"
App->>App : "等待其他worker处理/复用结果"
App-->>Client : "统一响应"
end
图表来源
- core/app.py:293-333
- core/app.py:400-495
- services/ai_analyzer.py:650-764
- services/alert_noise_reduction.py:213-293
- core/models.py:276-321
章节来源
- core/app.py:293-495
- services/ai_analyzer.py:650-764
- services/alert_noise_reduction.py:213-293
- core/models.py:276-321
- 请求解析:校验签名、解析 JSON、标准化数据、生成告警哈希。
- 并发控制:Redis 分布式锁 + 数据库行级锁,避免并发重复告警竞态。
- AI 分析:可命中缓存或调用 OpenAI API,记录 Token 使用与成本。
- 降噪与规则:基于时间窗口与置信度评分,识别衍生告警并抑制转发;匹配转发规则。
- 持久化与转发:保存事件、更新重复计数与通知时间,按规则与重要性自动转发。
flowchart TD
Start(["请求到达"]) --> Parse["解析请求/校验签名/标准化数据"]
Parse --> GenHash["生成告警哈希"]
GenHash --> LockAcquire{"获取处理锁"}
LockAcquire --> |成功| Analyze["AI 分析(缓存/规则/降级)"]
LockAcquire --> |失败| WaitOther["等待其他worker处理/复用结果"]
Analyze --> Noise["智能降噪与根因分析"]
WaitOther --> Noise
Noise --> Dedup["去重检测与复用历史分析"]
Dedup --> Persist["保存事件/更新重复计数/通知时间"]
Persist --> MatchRule["匹配转发规则"]
MatchRule --> Decide{"是否转发"}
Decide --> |是| Forward["自动转发"]
Decide --> |否| Skip["跳过转发"]
Forward --> Resp["返回统一响应"]
Skip --> Resp
图表来源
- core/app.py:683-800
- services/ai_analyzer.py:650-764
- services/alert_noise_reduction.py:213-293
章节来源
- core/app.py:683-800
- docs/changelogs/history/CONCURRENT_DUPLICATE_FIX.md:1-120
- Prompt 管理:支持从文件或环境变量加载,热重载无需重启。
- 缓存策略:命中缓存直接返回,节省成本;过期自动清理。
- 成本追踪:记录 Token 输入/输出与估算成本,支持降级策略(AI 失败时走规则分析)。
classDiagram
class AIAnalyzer {
+analyze_webhook_with_ai(webhook_data, alert_hash, skip_cache)
+log_ai_usage(route_type, alert_hash, source, model, tokens_in, tokens_out, cache_hit)
+get_cached_analysis(alert_hash)
+save_to_cache(alert_hash, analysis_result)
+load_user_prompt_template()
+reload_user_prompt_template()
}
class Config {
+OPENAI_API_KEY
+OPENAI_API_URL
+OPENAI_MODEL
+CACHE_ENABLED
+ANALYSIS_CACHE_TTL
+AI_COST_PER_1K_INPUT_TOKENS
+AI_COST_PER_1K_OUTPUT_TOKENS
}
AIAnalyzer --> Config : "读取配置"
图表来源
- services/ai_analyzer.py:141-195
- services/ai_analyzer.py:320-435
- services/ai_analyzer.py:650-764
- core/config.py:58-105
章节来源
- services/ai_analyzer.py:141-195
- services/ai_analyzer.py:320-435
- services/ai_analyzer.py:650-764
- core/config.py:58-105
- 特征提取:从告警数据与分析结果中抽取资源 ID、事件类型、摘要等关键字段。
- 相似度评分:基于 Jaccard 相似度、来源匹配、严重级别与时序衰减计算综合得分。
- 决策逻辑:衍生告警抑制转发;风暴检测;根因事件识别与置信度输出。
flowchart TD
Ctx["构建当前告警上下文"] --> Extract["提取资源ID/事件特征"]
Extract --> Collect["收集时间窗内候选告警"]
Collect --> Score["计算相似度与时间衰减"]
Score --> Decision{"是否达到阈值"}
Decision --> |是| Derived["衍生告警/风暴检测"]
Decision --> |否| Standalone["独立告警"]
Derived --> Suppress["抑制转发(可配置)"]
Standalone --> NoSuppress["正常处理"]
图表来源
- services/alert_noise_reduction.py:117-196
- services/alert_noise_reduction.py:213-293
章节来源
- services/alert_noise_reduction.py:117-196
- services/alert_noise_reduction.py:213-293
- WebhookEvent:存储原始请求、解析数据、AI 分析、重要性、去重状态与转发状态等。
- AnalysisCache:缓存 AI 分析结果,支持 TTL 与命中计数。
- AIUsageLog:记录每次 AI 调用的 Token 使用与成本估算。
- ForwardRule:转发规则配置,支持按来源、重要性与重复状态匹配。
erDiagram
WEBHOOK_EVENTS {
int id PK
string source
string client_ip
datetime timestamp
text raw_payload
json headers
json parsed_data
string alert_hash
json ai_analysis
string importance
string forward_status
int is_duplicate
int duplicate_of
int duplicate_count
int beyond_window
datetime last_notified_at
datetime created_at
datetime updated_at
}
ANALYSIS_CACHE {
int id PK
string cache_key UK
text analysis_result
int hit_count
datetime created_at
datetime expires_at
}
AI_USAGE_LOG {
int id PK
datetime timestamp
string model
int tokens_in
int tokens_out
float cost_estimate
bool cache_hit
string route_type
string alert_hash
string source
}
FORWARD_RULES {
int id PK
string name
boolean enabled
int priority
string match_importance
string match_duplicate
string match_source
string target_type
string target_url
string target_name
boolean stop_on_match
datetime created_at
datetime updated_at
}
图表来源
- core/models.py:22-121
- core/models.py:123-167
- core/models.py:169-206
- core/models.py:276-321
章节来源
- core/models.py:22-121
- core/models.py:123-167
- core/models.py:169-206
- core/models.py:276-321
- 规则匹配:按重要性、重复状态、来源匹配,支持优先级与命中后停止。
- 转发策略:结合降噪抑制、周期性提醒与通知冷却窗口,避免重复转发。
- 目标类型:飞书机器人、OpenClaw、Webhook 等。
章节来源
- core/app.py:564-662
- core/models.py:276-321
- 后端框架:FastAPI + Uvicorn(生产使用 Gunicorn + UvicornWorker)。
- 数据库:PostgreSQL(SQLAlchemy ORM)。
- 缓存与锁:Redis(分布式锁与轮询状态)。
- AI 服务:OpenAI API(可替换为兼容 OpenAI 的网关)。
- 安全:HMAC-SHA256 签名验证(可配置)。
- 监控:Prometheus 指标(通过 prometheus-fastapi-instrumentator)。
graph TB
FastAPI["FastAPI 应用(core/app.py)"] --> SQLAlchemy["SQLAlchemy(PostgreSQL)"]
FastAPI --> Redis["Redis(锁/轮询)"]
FastAPI --> OpenAI["OpenAI API"]
FastAPI --> Templates["Web 界面(templates)"]
FastAPI --> Services["业务服务(ai_analyzer/noise_reduction)"]
Docker["Dockerfile/docker-compose.yml"] --> FastAPI
Requirements["requirements.txt"] --> FastAPI
图表来源
- requirements.txt:1-18
- Dockerfile:1-69
- docker-compose.yml:1-111
- core/app.py:1-50
章节来源
- requirements.txt:1-18
- Dockerfile:1-69
- docker-compose.yml:1-111
- core/app.py:1-50
- 并发与锁:Redis 分布式锁 + 数据库行级锁,避免竞态;锁超时与等待时间可配置。
- 去重与查询:基于 alert_hash 与时间窗口的复合索引,查询性能稳定。
- 缓存与降级:AI 分析缓存与规则降级策略,显著降低 API 调用与响应延迟。
- 压缩与传输:GZip 压缩响应体,减少网络开销。
- 连接池:PostgreSQL 连接池配置,避免频繁建立连接带来的开销。
章节来源
- core/app.py:293-333
- core/models.py:56-61
- services/ai_analyzer.py:86-139
- core/config.py:83-92
- 数据库连接失败:启动前进行连接测试,检查 DATABASE_URL 与凭据。
- AI 分析失败:检查 OPENAI_API_KEY 与 API 网关连通性;若启用降级,系统将回退到规则分析。
- 重复告警未去重:确认告警数据包含关键字段(如 Type、RuleName、Resources 等),检查 DUPLICATE_ALERT_TIME_WINDOW 配置。
- 并发重复告警竞态:确认已应用并发修复(行级锁 + 事务内检测),并检查数据库索引是否存在。
- 告警清理:使用清理脚本批量删除低价值告警,注意备份与不可逆性。
章节来源
- main.py:27-33
- services/ai_analyzer.py:738-764
- docs/CLEANUP_GUIDE.md:1-120
- docs/changelogs/history/CONCURRENT_DUPLICATE_FIX.md:1-120
本项目通过“Webhook 接收 + AI 智能分析 + 智能降噪 + 重复告警去重 + 自动转发”的一体化设计,为企业提供了高效、可扩展、可治理的告警处理能力。其模块化架构、完善的配置体系与可观测性设计,使其既能满足初学者快速上手,也能支撑生产环境的高并发与高可用需求。配合 Docker 与 docker-compose 的一键部署能力,用户可在几分钟内完成环境搭建与功能验证。
- 快速开始:克隆仓库、安装依赖、配置环境变量、初始化数据库、启动服务。
- API 接口:Webhook 接收、配置管理、历史查询、重新分析与手动转发。
- 部署建议:使用 Docker Compose 进行容器化部署,结合 Nginx/反向代理与健康检查。
章节来源
- README.md:25-96
- README.md:227-346
- README.md:423-434