anantha037/aiops-log-anomaly-detection
GitHub: anantha037/aiops-log-anomaly-detection
基于 Isolation Forest 无监督学习算法的实时日志异常检测引擎,通过动态文本掩码与 TF-IDF 特征压缩对非结构化日志流进行结构异常评分,以 FastAPI 接口和 Streamlit 仪表板提供服务。
Stars: 1 | Forks: 0
# AIOps 日志异常检测引擎 🛡️
一个端到端的无监督机器学习 pipeline,旨在实时摄取、处理并对系统日志进行评分。通过对压缩后的文本特征应用 Isolation Forests,该引擎能够识别越界的系统状态和结构异常,而无需依赖带有标签的历史数据集。
## 📈 价值主张与业务背景
在现代分布式云架构中,应用程序和基础设施 daemon 每天都会产生数以百万计的非结构化日志条目。标准的基于规则的告警系统(例如,搜索 `ERROR` 一词)无法捕捉到新型的、结构性的退化问题,并且存在很高的误报率。
这款 **AIOps 日志异常检测引擎** 通过以下方式解决了这些痛点:
- **零标签依赖**:完全以无监督的方式学习正常的系统运行基线。
- **结构异常检测**:自动标记罕见事件,例如失败的任务配置、临时文件夹设置或异常的 daemon 序列路径,这些往往是关键服务宕机或安全漏洞的前兆。
- **低延迟推理**:实时运行,动态地对传入的日志流进行向量化并评分,以适应高吞吐量的日志摄取 pipeline。
## 🏗️ 系统架构流程
下图展示了日志行从摄取到实时运维监控的整个流程:
```
[ Raw HDFS Logs ]
│
▼ (ingest.py / Regex Engine)
[ Dynamic Text Masking ] ──► Mask Block IDs, IPs, and Standalone Numbers
│
▼ (scikit-learn)
[ TF-IDF Vectorization ] ──► Transforms clean strings into 240-term vocabulary
│
▼ (train_anomaly.py / Isolation Forest)
[ Model Offline Baseline ] ──► Learns normal structure (Contamination = 5%)
│
▼ (joblib Serialization)
[ Serialized Model & Vectorizer (.pkl) ]
│
▼ (main.py / FastAPI Lifespan Startup)
[ FastAPI Live Service ] ──► Exposes /score-log POST Endpoint
│
▼ (app.py / Streamlit)
[ Streamlit Operations Dashboard ] ──► Visualizes normal streams vs. glowing alerts
```
## 🛠️ 核心工程亮点
### 1. 动态文本掩码与词汇表压缩
非结构化的日志消息中包含仅出现一次的可变 token(例如,事务 ID、像 `blk_38865049064139660` 这样的区块哈希、IP 地址和文件大小)。直接对这些 token 进行原始的 TF-IDF 处理会导致严重的过拟合以及极端的特征维度膨胀。
- **我们的解决方案**:应用确定性的正则表达式规则,将瞬态值清洗并掩码为通用的占位符(``、``、``)。
- **影响**:这将我们 TF-IDF 的特征词汇表从成千上万个充满噪声的维度压缩到了**仅仅 240 个干净的结构化特征**,从而迫使机器学习模型完全专注于运行级短语(例如 `addStoredBlock`、`PacketResponder terminating`)。
### 2. 无监督异常隔离
- **Isolation Forest 模型**:我们使用 Isolation Forest 来隔离异常,而不是对正常的日志密度进行建模(因为日志密度高度复杂且非线性)。异常值更靠近森林中树的根节点,因为需要更少的随机拆分就能将它们与数据的其余部分分离开来。
- **校准**:配置了严格的 `contamination=0.05`(预期异常率为 5%)和固定的 `random_state=42`。它能够以极高的精度标记罕见的任务执行和临时文件路径。
### 3. 生产级 API 与 UI
- **FastAPI 后端**:使用现代的 `lifespan` 上下文管理器构建,在启动时将训练好的 Isolation Forest 和 TF-IDF 模型一次性加载到内存中,以确保亚毫秒级的响应延迟。
- **Streamlit 指挥中心**:采用自定义的深色主题运维仪表板。它能够模拟日志流并动态渲染告警——甚至为被标记的异常配备了一个发光的红色终端模拟器框。
## 🚀 本地设置与安装
请按照以下步骤并排运行 FastAPI 后端服务和 Streamlit 界面:
### 前置条件
请确保您已安装 Python 3.9+ 和 Git。
### 1. 克隆代码库
```
git clone
cd "Log Anomaly Detection"
```
### 2. 运行数据摄取与模型训练
准备数据集并训练 Isolation Forest 模型:
```
# 下载 HDFS 日志样本,解析并清理消息
python ingest.py
# 训练 Isolation Forest 并保存 anomaly_detector.pkl
python train_anomaly.py
```
### 3. 启动 FastAPI 后端
使用 Uvicorn 启动高性能 API 服务器:
```
# 在 http://127.0.0.1:8000 上本地启动服务器
python main.py
```
### 4. 启动 Streamlit 运维仪表板
在单独的终端窗口中,启动前端界面:
```
# 在 http://127.0.0.1:8501 上本地启动 dashboard
streamlit run app.py
```
## 🎯 验证沙箱
一旦两个服务都在运行:
1. 在浏览器中打开 `http://localhost:8501`。
2. 在 **Log Injector Control Panel** 下,选择一条预设消息:
- 选择 **Normal Log** 将返回 `is_anomaly: false` 以及正的异常分数,并显示绿色的控制台流。
- 选择 **Anomalous Log** 将返回 `is_anomaly: true` 以及负的分数,并触发闪烁的红色 **[ALERT] SYSTEM ANOMALY DETECTED** 横幅。
3. 使用文本框测试您自己的自定义日志,以查看日志结构的变化如何影响 Isolation Forest 的决策分数。
标签:AIOps, Apex, AV绕过, FastAPI, Kubernetes, 异常检测, 机器学习, 运维监控, 逆向工具