kalipindiprasanthsai1267-hub/Log-Anamoly-Detection-System-Using-ELK-Stack-and-Machine-Learning
GitHub: kalipindiprasanthsai1267-hub/Log-Anamoly-Detection-System-Using-ELK-Stack-and-Machine-Learning
这是一个基于 ELK 栈和无监督机器学习的分布式日志异常检测系统,旨在通过实时 ETL 处理和随机模型分析来识别基础设施遥测数据中的性能偏差。
Stars: 0 | Forks: 0
# 使用 ELK Stack 和机器学习的日志异常检测系统



## 执行摘要
本仓库包含分布式 AIOps 日志异常检测系统的基础设施配置、ETL 流水线逻辑和机器学习遥测模拟器。该流水线专为监控微服务环境而设计,执行实时日志摄取、通过 Grok 解析进行写入时模式内存类型转换,以及无监督随机异常检测,从而在不依赖静态阈值的情况下识别基础设施性能下降。
## 1. 系统架构
该流水线采用完全解耦的架构,以确保在网络分区期间实现高吞吐量、水平可扩展性和容错能力。
* **遥测生成 (`/telemetry_simulator`):** 一个自定义 Python 守护进程,用于生成本地化的高方差基础设施废气(模拟 CPU 峰值、内存泄漏和网络延迟)。
* **边缘传输 (`Filebeat`):** 部署在边缘的轻量级数据转发器,负责追踪动态 `.log` 文件,并建立具有背压感知的 TCP 连接到摄取层。
* **流处理 (`Logstash`):** 运行在端口 5044 上的集中式 ETL 引擎。它利用模块化的多阶段流水线配置来规范传入的 JSON/非结构化数组。
* **数据存储与推理 (`Elasticsearch` & `Kibana`):** 一个集群化的倒排索引数据存储(端口 9200),运行原生集成的无监督机器学习作业,以对基线分布进行建模并标记实时偏差。
## 2. ETL 流水线拓扑
Logstash 配置在时间上被隔离为不同的运行阶段,以优化执行图并确保可维护性。
1. `01-input.conf`:绑定 Beats 输入插件,配置 SSL/TLS 终止并建立队列大小参数。
2. `20-parse.conf`:应用高度优化的 Grok 正则表达式。从原始字符串中提取时间数据、严重性级别和特定的子系统状态。
3. `30-enrich.conf`:执行内存类型转换(例如,将基于字符串的字节变异为整数),并丢弃格式错误或多余的有效负载字段,以优化 Elasticsearch 分片索引。
4. `40-route.conf`:应用条件分支逻辑,根据动态变量将文档路由到特定索引。
5. `99-output.conf`:管理输出缓冲区以及与 Elasticsearch 集群的连接池。
## 3. 数学异常检测模型
与依赖硬编码阈值的传统告警系统不同,本系统利用 Elastic 的机器学习节点来计算指标分布的概率密度。
对于连续时间序列指标,系统评估局部方差。为了识别多元异常,假设遥测特征服从多元高斯分布,该模型量化马氏距离。如果事件向量 $x$ 与均值向量 $\mu$ 的距离超过动态阈值(由特征空间的协方差矩阵 $\Sigma$ 归一化),则该向量被标记为异常:
$$D_M(x) = \sqrt{(x - \mu)^T \Sigma^{-1} (x - \mu)}$$
当事件边界的归一化概率降至统计显著阈值以下(例如,$P(x) < 0.01$)时,系统会触发变更点检测事件,以隔离导致方差的具体应用子域。
## 4. 可视化验证与遥测仪表板
以下操作仪表板验证了流水线的端到端执行和推理准确性。
### 4.1 ML 节点健康状况与作业并发性
验证专用的 ML 节点在处理跨并发异常检测作业的超过 770,000 个文档时,未出现内存耗尽或 JVM 堆崩溃。

### 4.2 时间序列边界与峰值检测
展示了无监督学习边界(浅蓝色)建立了基线摄取速率,成功捕获并标记了显著的体积偏差。

### 4.3 日志速率变更点分析
隔离了导致日志速率激增的特定字段值分布,立即精确定位异常的根本原因维度。

### 4.4 实时状态聚合
自定义 Kibana Lens 可视化,解析 Logstash 输出以聚合原始用户操作和每个应用模块的系统日志计数。

## 5. 部署协议(VirtualBox 环境)
该系统旨在原生运行在通过 VirtualBox 配置的 Ubuntu Linux 环境中。
### 5.1 基础设施初始化
核心 ELK 守护进程通过 `systemctl` 进行管理。从 Ubuntu 虚拟机的冷启动开始,执行以下命令以初始化数据存储和流处理流水线:
```
# 初始化 Elasticsearch inverted-index 和 ML 节点
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
# 初始化 Kibana web interface
sudo systemctl start kibana
sudo systemctl enable kibana
# 初始化 Logstash ETL pipeline
sudo systemctl start logstash
sudo systemctl enable logstash
```
5.2 验证
在生成遥测之前,确保网络端口处于监听状态:
Elasticsearch:执行 curl -X GET "localhost:9200/"
Logstash Pipeline:验证 TCP 端口 5044 是否已打开以接收 Beats 流量。
Kibana:在浏览器中导航至 http://localhost:5601。
5.3 遥测生成
一旦守护进程处于活动状态且 ML 节点已稳定,导航到本地仓库目录以触发随机负载生成器:
Bash
cd telemetry_simulator
# 在后台执行生成器
python3 generator.py &
无监督机器学习作业将需要大约 15 分钟的持续遥测摄取来对基线分布进行建模,然后才能主动标记马氏距离阈值。
标签:AIOps, Apex, Elasticsearch, ELK Stack, ETL, Filebeat, Grok, JavaCC, Logstash, Python, 内容过滤, 分布式系统, 响应大小分析, 基础设施监控, 大数据, 异常检测, 数据管道, 无后门, 无监督学习, 智能运维, 机器学习, 目录扫描, 越狱测试, 软件工程, 逆向工具, 遥测