fault-log-analyzer/README.md

83 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# fault-log-analyzer
主机监控系统HMS故障日志捕获与分析模块。
## 功能
1. **故障日志捕获管道**:消费 `logs.raw`,按级别/关键字/正则过滤,结构化解析,
打标后写入 `logs.fault` 与 Elasticsearch`hms-fault-log-{yyyy.MM}`)。
2. **故障日志归类**:特征提取(模板化 + TF-IDF→ 相似聚类DBSCAN / 纯 Python 后端)
→ 映射到 `fault_type`
3. **根因分析**:时间/主机关联指标事件 + 指标-故障规则库 + trace 关联,产出
`root_cause`(含 evidence 与 confidence
4. **REST API**:故障日志查询、根因查询、故障类型/过滤规则管理接口。
## 目录结构
```
src/fault_log_analyzer/
config.py 配置模型与环境变量加载
models.py 数据模型FaultLog / RootCause / FaultType / ...
parser.py 日志结构化解析与模板化
filters.py 故障过滤规则
fingerprint.py MinHash 指纹与去重
cluster.py TF-IDF 特征 + DBSCAN 聚类
classifier.py 簇 -> fault_type 归类
root_cause.py 根因分析
storage.py 存储抽象 + 内存实现(测试/离线)
integrations.py 可选真实后端Kafka/ES/MySQL/Redis
pipeline.py 故障捕获管道
workers.py 聚类 / 根因分析 worker
api.py REST API标准库 http.server 实现)
__main__.py CLI 入口
```
## 快速开始
```bash
# 安装(核心零依赖,可选依赖见 requirements.txt
pip install -e .
# 运行单元测试131 个测试用例)
python -m unittest discover -s tests -v
# 启动服务(内存存储,便于本地验证)
python -m fault_log_analyzer --storage memory --api-host 127.0.0.1 --api-port 8080
# 健康检查
curl http://127.0.0.1:8080/healthz
curl http://127.0.0.1:8080/api/v1/fault-logs
```
## 测试
```bash
python -m unittest discover -s tests -v
# Ran 131 tests ... OK
```
测试覆盖:配置加载、数据模型、日志解析/模板化、故障过滤规则、MinHash 指纹去重、
TF-IDF/DBSCAN 聚类、故障归类、根因分析、捕获管道、聚类/根因 worker、REST API、
以及 Kafka/Elasticsearch/MySQL/Redis 可选后端适配器(未安装依赖时的回退行为与索引名)。
## 环境变量(生产)
| 变量 | 默认值 | 说明 |
|---|---|---|
| `KAFKA_BOOTSTRAP_SERVERS` | `localhost:9092` | Kafka 地址 |
| `KAFKA_GROUP_ID` | `fault-log-analyzer` | 消费者组 |
| `KAFKA_LOGS_RAW_TOPIC` | `logs.raw` | 原始日志 topic |
| `KAFKA_LOGS_FAULT_TOPIC` | `logs.fault` | 故障日志 topic |
| `ES_HOSTS` | `http://localhost:9200` | ES 地址(逗号分隔) |
| `MYSQL_HOST` / `MYSQL_PORT` / `MYSQL_USER` / `MYSQL_PASSWORD` / `MYSQL_DB` | localhost | MySQL 连接 |
| `REDIS_URL` | `redis://localhost:6379/0` | Redis 地址 |
| `CLUSTER_EPS` | `0.75` | DBSCAN eps余弦距离 |
| `CLUSTER_MIN_SAMPLES` | `5` | DBSCAN min_samples |
| `ROOT_CAUSE_WINDOW_MINUTES` | `5` | 根因分析时间窗口 |
## 开发说明
- 模块状态:`modules/fault-log-analyzer.md`
- 开发说明:`docs/02-develop/fault-log-analyzer-dev-notes.md`
- 设计依据:`docs/01-design/architecture.md`5.3)、`database-design.md``api-design.md`