adiallo10/security-ops-dashboard
GitHub: adiallo10/security-ops-dashboard
基于Flask和Chart.js构建的轻量级安全运营仪表板,将合成告警数据可视化为热力图和趋势图,并支持本地或Claude AI生成自然语言趋势解读。
Stars: 0 | Forks: 0
# 安全运维迷你仪表板
一个轻量级的 Flask 仪表板,将合成的安全警报数据转化为
**严重程度热力图、趋势图表和简明的自然语言说明**。点击
“解释此趋势”,后端将总结峰值或模式可能的含义以及下一步需要检查的内容——这使得数据不仅对分析师,也对利益相关者具有可读性。
所有操作均使用合成数据离线运行。AI 解释功能是可选的:
如果没有 API key,它将使用确定性的本地解释器;如果配置了
Claude (Anthropic) key,它将生成更丰富的自然语言摘要。
## 为什么开发这个项目
仪表板通常只展示了发生了*什么*,却极少说明*这意味着什么*。这个项目增加了一层
轻量级的 AI,将图表转化为简短、易于人类理解的要点——这在
向非技术团队或只想了解核心结论的经理做简报时非常有用。
## 功能
- **合成数据生成器** —— 跨五大 SIEM/EDR 来源和六大类别的、确定且逼真的警报,并包含一个注入的钓鱼攻击峰值,因此
有真实的趋势可供解释。
- **严重程度摘要磁贴** —— 总数以及低/中/高/严重级别的计数。
- **趋势图** —— 每日警报数,可在“所有警报”和任意
单个类别之间切换(Chart.js 折线图)。
- **热门类别条形图**。
- **活动热力图** —— 显示警报触发时间的星期 × 小时网格。
- **“解释此趋势”** —— `POST /api/explain` 返回简明的自然语言
摘要 + 建议的下一步操作。默认使用本地解释器;如果已配置则使用 Claude。
- **密钥保留在服务端** —— 浏览器仅与 Flask 通信,绝不直接与
Anthropic 交互。
## 架构
```
Browser (Chart.js) ──GET /api/alerts──► Flask ──► secops_dashboard.data
│ │
└──POST /api/explain───────────────►└──► secops_dashboard.explain ──► (optional) Claude API
```
所有的聚合逻辑都位于 `secops_dashboard/` 中,并且独立于
Web 层进行了单元测试。
## 安装说明
```
python3 -m venv .venv && source .venv/bin/activate
pip install -e . # core (Flask)
pip install -e ".[ai]" # optional Claude explanations
# 可选:使用 Claude API 获取解释
export ANTHROPIC_API_KEY="sk-ant-..." # never commit this
flask --app secops_dashboard.server run
# 打开 http://127.0.0.1:5000
```
生成独立的 JSON 数据集(用于演示或其他工具):
```
python -m scripts.generate_data sample_data/alerts.json
```
## 测试
```
python -m unittest discover -s tests -v
```
测试涵盖了确定性生成、验证所有聚合数据总和是否等于
总数、注入的峰值,以及趋势解释器的峰值/平稳/空数据路径。
## 项目结构
```
secops_dashboard/
data.py # synthetic data + aggregations (severity, trend, heatmap)
explain.py # local + optional Claude trend explanations
server.py # Flask app: /, /api/alerts, /api/explain
templates/
index.html # dashboard page
static/
app.js # Chart.js rendering + explain button
style.css # dark, responsive UI
scripts/
generate_data.py
tests/
```
## 我如何使用 Claude
仪表板的数学计算是纯 Python 实现的 —— Claude 是**“核心意义”层**。当你
点击 *解释此趋势* 时,后端会将选定的数据系列(标签 +
数值 + 严重程度组合)发送给 Claude,并要求其提供一个简短的、适合管理者阅读的解读,
同时附带建议的下一步操作。
设计决策:
- **密钥保留在服务端。** 浏览器仅调用 Flask 的 `/api/explain`
endpoint;由 Flask 调用 Claude。API key 绝不会被发送到客户端。
- **确定性回退。** 在没有 `ANTHROPIC_API_KEY` 的情况下,本地解释器会
检测峰值/平稳/上升趋势 —— 因此演示始终可以离线运行。
- **基于事实的 prompt。** 该 prompt(见
[`explain.py`](secops_dashboard/explain.py))仅包含真实的数据
点,并严禁捏造细节。
- **Claude 帮助我构建项目的地方:** 调整合成数据生成器,使
注入的钓鱼攻击峰值看起来更逼真,以及为深色主题优化 Chart.js 的默认
选项。
## 安全说明
- 所有数据均为**合成/模拟数据** —— 没有真实的警报或 PII。
- Claude API key 通过 Flask 代理保留在服务端;它绝不会发送到
浏览器。
## 许可证
MIT — 见 [LICENSE](LICENSE)。
标签:数据可视化, 调试辅助, 逆向工具