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, 异常检测, 机器学习, 运维监控, 逆向工具