PM数据管道系统
用于从远程SFTP服务器获取、存储和查询性能监控(PM)XML数据的完整系统。
建筑
SFTP Server → Job Server (scheduled fetcher) → PostgreSQL → MCP Server → REST API → Streamlit Chatbot组件
- 作业服务器:定时SFTP文件提取器和XML解析器
- PostgreSQL数据库:存储所有PM计数器数据
- MCP服务器:具有自然语言处理功能的查询引擎
- REST API:FastAPI服务器公开查询端点
- 流线型前端:用于查询数据的聊天机器人界面
快速开始
先决条件
- Docker和Docker Compose
设置
- 克隆仓库
- 复制
env.example到.env:
cp env.example .env- 这
.env文件已为docker compose中包含的示例SFTP服务器配置:
SFTP_HOST=sftp_server
SFTP_USERNAME=sftpuser
SFTP_PASSWORD=password
SFTP_PORT=22
SFTP_REMOTE_PATH=/home/sftpuser/uploads- 启动所有服务(包括示例SFTP服务器):
docker-compose up -d- 将示例XML文件上传到SFTP服务器:
./scripts/upload_sample_files.sh- 访问前端
http://localhost:8501
使用自己的SFTP服务器
如果您有自己的SFTP服务器,请更新 .env 使用您的凭据文件:
SFTP_HOST=your-sftp-host.com
SFTP_USERNAME=your-username
SFTP_PASSWORD=your-password
SFTP_PORT=22
SFTP_REMOTE_PATH=/path/to/xml/files/然后只启动应用程序服务(不包括示例SFTP服务器):
docker-compose up -d postgres job_server api_server frontend用法
Streamlit聊天机器人
打开Streamlit前端,用自然语言提问:
- “2024-01-16下午2:10的ifUtilizationIn值是多少?”
- “显示所有界面”
- “有哪些可用的计数器?”
API终点
GET /api/query?q=-查询数据GET /api/interfaces-列出接口GET /api/counters-列出计数器GET /api/alerts-获取警报GET /api/config/fetch-interval-获取获取间隔POST /api/config/fetch-interval-更新获取间隔
配置
提取间隔可以更改:
- 通过Streamlit UI侧栏
- 通过REST API
- 作业服务器将自动获取新的间隔
数据库模式
系统存储:
- 文件元数据和校验和
- 网元信息
- 测量间隔
- 接口计数器
- IP/TCP/系统计数器
- BGP对等数据
- 阈值警报
- 数据质量指标
发展
运行个人服务
# Job Server
cd job_server
python main.py
# API Server
cd api_server
uvicorn main:app --reload
# Frontend
cd frontend
streamlit run app.py环境变量
看 .env.example 对于所有可用的配置选项。
使用示例SFTP服务器进行测试
docker compose包含一个用于测试的示例SFTP服务器。它使用 atmoz/sftp 图像,并配置有:
- 用户名:
sftpuser - 密码:
password - 端口:
2222(映射到集装箱港口22) - 上传目录:
/home/sftpuser/uploads
手动SFTP连接
您可以手动连接到示例SFTP服务器:
# From your host machine
sftp -P 2222 sftpuser@localhost
# Or from within Docker network
docker exec -it pm_sftp_server sftp sftpuser@localhost上传文件
- 使用上传脚本 (推荐):
./scripts/upload_sample_files.sh- 通过Docker手动上传:
docker cp example_1.xml pm_sftp_server:/home/sftpuser/uploads/
docker cp example_2.xml pm_sftp_server:/home/sftpuser/uploads/- 通过SFTP客户端手动上传:
sftp -P 2222 sftpuser@localhost
# Then in SFTP prompt:
put example_1.xml /home/sftpuser/uploads/
put example_2.xml /home/sftpuser/uploads/许可证
麻省理工学院
