You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ErrorDetecting/backend/README.md

115 lines
4.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Hadoop 故障诊断系统 - 后端服务 (FastAPI)
本项目是 Hadoop 故障诊断系统的后端核心,基于 FastAPI 构建,提供集群监控、日志采集、指标分析以及基于 AI 的智能故障诊断功能。
## 🚀 核心功能
- **用户与认证**: 基于 JWT 的无状态认证,支持用户注册、登录及权限管理。
- **集群与节点管理**: 支持 Hadoop 集群的注册、SSH 连通性校验、HDFS UUID 获取及节点状态管理。
- **指标采集与监控**:
- 自动采集集群及节点的 CPU、内存使用率。
- 提供实时指标查询与趋势图数据支持。
- **Hadoop 日志管理**:
- 远程日志读取:通过 SSH 实时读取各节点 Hadoop 日志。
- 自动日志采集:增量 tail 模式采集日志并持久化至数据库。
- 批量回填:支持对历史日志进行批量同步。
- **AI 智能诊断**:
- 集成 LangChain 与 OpenAI提供流式对话接口 (SSE)。
- 智能智能体 (Agent) 可自动调用工具:查看日志、执行远程命令、分析集群状态。
- **系统执行日志**: 记录所有远程运维操作与系统任务的执行过程。
## 🛠 技术栈
- **框架**: [FastAPI](https://fastapi.tiangolo.com/) - 高性能异步 Web 框架。
- **数据库**: [PostgreSQL](https://www.postgresql.org/) + [SQLAlchemy (Async)](https://www.sqlalchemy.org/) - 异步 ORM 驱动。
- **SSH 通信**: [Paramiko](https://www.paramiko.org/) - 处理远程命令执行与日志读取。
- **AI/LLM**: [LangChain](https://www.langchain.com/) + OpenAI API - 实现故障诊断智能体。
- **任务调度**: 内置线程化采集器,支持异步指标与日志采集任务。
- **认证**: PyJWT + Passlib (BCrypt) - 安全的身份验证。
## 📂 项目结构
```text
backend/
├── app/
│ ├── agents/ # AI 智能体定义与工具编排
│ ├── deps/ # FastAPI 依赖注入(如认证、数据库)
│ ├── models/ # SQLAlchemy 异步模型
│ ├── routers/ # API 路由模块集群、指标、日志、AI等
│ ├── services/ # 业务逻辑服务SSH管理、LLM调用等
│ ├── workers/ # 异步任务处理逻辑
│ ├── config.py # 环境变量与全局配置
│ ├── db.py # 数据库引擎与会话管理
│ ├── main.py # 应用入口与路由注册
│ └── log_collector.py # 日志采集器核心实现
├── scripts/ # 数据库初始化与验证脚本
├── tests/ # 单元测试与集成测试
├── requirements.txt # 依赖清单
└── start_backend.sh # 一键启动脚本
```
## ⚙️ 环境变量配置
`backend/` 目录下创建 `.env` 文件,配置如下关键参数:
| 参数 | 描述 | 默认值 |
| :--- | :--- | :--- |
| `DATABASE_URL` | PostgreSQL 异步连接串 | `postgresql+asyncpg://postgres:password@localhost:5432/hadoop_fault_db` |
| `JWT_SECRET` | JWT 签名密钥 | `dev-secret` |
| `JWT_EXPIRE_MINUTES` | 令牌有效期(分钟) | `60` |
| `SSH_PORT` | 默认远程 SSH 端口 | `22` |
| `SSH_TIMEOUT` | SSH 连接超时时间 | `10` |
| `HADOOP_LOG_DIR` | Hadoop 远程日志默认路径 | `/usr/local/hadoop/logs` |
| `APP_TIMEZONE` | 系统时区 | `Asia/Shanghai` |
| `OPENAI_API_KEY` | OpenAI 密钥(用于 AI 诊断) | - |
## 🛠 安装与启动
### 1. 环境准备
- Python 3.10+
- PostgreSQL 14+
### 2. 安装依赖
```bash
cd backend
python3 -m venv .venv
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
pip install -r requirements.txt
```
### 3. 初始化数据库
执行 `scripts/` 目录下的 SQL 脚本或通过内置脚本初始化:
```bash
# 导入 SQL 脚本
psql -h <host> -U <user> -d <db> -f ../doc/project/数据库建表脚本_postgres.sql
```
### 4. 启动服务
```bash
# 开发模式
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
```
或使用提供的启动脚本:
```bash
bash start_backend.sh
```
## 📖 API 接口预览
所有接口均带有 `/api/v1` 前缀。
- **Health**: `GET /health`
- **Auth**: `POST /auth/login`, `POST /auth/register`
- **Clusters**: `GET /clusters`, `POST /clusters/register`
- **Metrics**: `GET /metrics/trend`, `POST /metrics/collector/start`
- **Hadoop Logs**: `GET /hadoop/logs/all/{log_type}`, `GET /hadoop/collectors/status`
- **AI**: `POST /ai/chat` (支持 SSE 流式返回)
详细接口文档启动后访问:`http://localhost:8000/docs`
## 🧪 验证与测试
运行端到端验证脚本:
```bash
python scripts/verify_register.py
```