[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-93566":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":18,"hasPages":16,"topics":19,"createdAt":9,"pushedAt":9,"updatedAt":20,"readmeContent":21,"aiSummary":9,"trendingCount":14,"starSnapshotCount":14,"syncStatus":13,"lastSyncTime":22,"discoverSource":23},93566,"flinkAgentMonitoring","JiXiner\u002FflinkAgentMonitoring","JiXiner","构建Flink Agent智能体 协助你Flink编程",null,"Python",120,3,2,0,38.81,false,"main",true,[],"2026-07-22 04:02:09","# Flink-Agent 智能服务器性能分析与 DeepSeek AI 运维平台\n\n> 基于 Django、WebSocket 与 DeepSeek 的服务器集群实时监控和智能运维平台。\n\nFlink-Agent 面向大数据平台运维场景，实时采集本机及远程 Linux 服务器的 CPU、内存、磁盘、网络和进程指标，通过 WebSocket 推送到 ECharts Dashboard，并由智能运维助手 **@Jix** 提供干预提醒、故障分析和优化建议。\n\n系统健康时，@Jix 保持静默值守；只有检测到需要人工干预的资源风险、状态恢复或定期巡检发现优化项时，才会主动推送消息。\n\n## 项目特性\n\n- 本机 Agent 每秒采集 CPU、内存、磁盘、I\u002FO、网络和进程数据\n- 独立后台线程运行，不阻塞 Django 请求线程\n- 基于 Channels 与 Daphne 的 WebSocket 实时推送\n- ECharts 最近 60 秒 CPU、内存、网络趋势图\n- CPU 与内存占用最高的进程 TOP 10\n- 服务器集群配置、切换、连接测试和远程 SSH 采集\n- SSH 密码后端加密存储，API 不返回敏感字段\n- @Jix 对话式运维问答和本地降级诊断\n- DeepSeek Chat Completions 智能分析\n- 每 12 小时自动巡检，可在页面立即触发巡检\n- AIReport 巡检报告持久化\n- 大数据基础设施集群态势与节点资源视图\n- 有界历史队列和降频进程扫描，避免页面与服务端卡顿\n\u003Cimg width=\"1880\" height=\"911\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F1ccb4a4f-bce7-4f8a-b211-ba53259ddf26\" \u002F>\n\u003Cimg width=\"1411\" height=\"879\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fc3b4b44a-d277-4275-8cda-67ec21924c15\" \u002F>\n\u003Cimg width=\"1255\" height=\"876\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F65e4ded8-dd12-4069-8d65-4f7bd20d267c\" \u002F>\n\u003Cimg width=\"325\" height=\"406\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fcbedd323-60dd-4771-ba25-724b4476dd30\" \u002F>\n\n\n## 系统架构\n\n```mermaid\nflowchart LR\n    Local[\"本机 psutil Agent\u003Cbr\u002F>每 1 秒\"] --> Collector[\"后台指标采集层\"]\n    Remote[\"远程 Linux 服务器\u003Cbr\u002F>Paramiko SSH \u002F 每 5 秒\"] --> Collector\n    Builtin[\"数据基础设施\u003Cbr\u002F>节点资源模型\"] --> Collector\n\n    Collector --> Buffer[\"有界历史队列\u003Cbr\u002F>最多 120 条\"]\n    Collector --> Database[(\"SQLite\")]\n    Buffer --> Channels[\"Django Channels\"]\n    Channels --> WebSocket[\"WebSocket\"]\n    WebSocket --> Dashboard[\"ECharts Dashboard\"]\n\n    Collector --> Jix[\"@Jix 智能运维助手\"]\n    Jix --> DeepSeek[\"DeepSeek API\"]\n    Jix --> Report[\"AIReport \u002F 12 小时巡检\"]\n    Report --> Database\n    Report --> WebSocket\n```\n\n## 技术栈\n\n| 分类 | 技术 |\n| --- | --- |\n| 后端 | Python 3.9、Django 4.2、Django REST Framework |\n| 实时通信 | Django Channels、Daphne、WebSocket |\n| 指标采集 | psutil、threading |\n| 远程监控 | Paramiko、SSH |\n| AI | DeepSeek Chat Completions API |\n| 前端 | HTML、CSS、JavaScript、ECharts |\n| 数据库 | SQLite |\n| 安全 | Fernet 对称加密、环境变量、API 敏感字段隔离 |\n\n## 功能说明\n\n### 本机实时监控\n\n本机 Agent 默认每秒采集一次：\n\n- CPU 使用率、逻辑核心数、当前频率\n- 内存总量、已使用量、使用率\n- 磁盘总量、已使用量、使用率、读写速率\n- 网络下载和上传速率\n- CPU 占用最高进程 TOP 10\n- 内存占用最高进程 TOP 10\n\n进程列表每 5 秒更新一次，减少高频遍历系统进程带来的额外负载。\n\n### 服务器集群\n\nDashboard 顶部支持添加和切换服务器。远程服务器配置包含：\n\n- 名称\n- IP 地址\n- SSH 端口\n- 用户名\n- 密码\n- 节点说明\n\n远程 Agent 使用 SSH 执行 Linux 系统命令，获取 CPU、内存、磁盘、网络和进程指标。多个远程节点由后台采集管理器并发处理，不会阻塞 Web 请求。\n\n### @Jix 智能运维助手\n\n@Jix 接收当前服务器指标、服务器集群状态和数据基础设施上下文，可用于回答：\n\n- 当前服务器是否需要干预？\n- 哪个资源存在风险？\n- Kafka、Redis 或 MySQL 当前是否异常？\n- Flink 任务或服务器应该如何优化？\n- 当前项目代码有哪些可改进项？\n\n主动提醒策略：\n\n1. 健康状态下保持静默。\n2. CPU、内存或磁盘进入关注\u002F告警区间时推送干预提醒。\n3. 指标恢复后推送恢复信息。\n4. 每 12 小时进行一次服务器和项目代码巡检。\n5. 巡检发现优化项时，通过 WebSocket 推送给 Dashboard。\n\nDeepSeek 不可用或没有配置密钥时，系统会自动使用本地规则返回基于实时指标的降级回答。\n\n### 数据基础设施视图\n\n系统内置统一的数据基础设施节点资源模型，覆盖：\n\n- Kafka\n- Redis\n- MySQL\n- Flink\n- HDFS\n- YARN\n- ZooKeeper\n- Elasticsearch\n\n集群视图展示节点角色、运行状态、CPU、内存、网络和各组件关键指标。统一的数据结构可以直接进入 WebSocket 推送、Dashboard 展示和 @Jix 运维分析链路。\n\n## 快速开始\n\n### 1. 获取项目\n\n```bash\ngit clone \u003Cyour-repository-url>\ncd flinkAgentDjango\n```\n\n如果直接使用当前项目目录：\n\n```powershell\ncd E:\\pythonProgram\\flinkAgentDjango\n```\n\n### 2. 安装依赖\n\n建议使用 Python 3.9：\n\n```bash\npython -m pip install -r requirements.txt\n```\n\n项目已经固定 Windows Python 3.9 所需的兼容依赖版本，避免 Daphne、Paramiko 的加密组件出现 DLL 加载错误。\n\n### 3. 初始化数据库\n\n```bash\npython manage.py migrate\n```\n\n迁移过程会自动创建一个“本机节点”。\n\n### 4. 配置 DeepSeek\n\n复制配置模板：\n\n```powershell\nCopy-Item .env.example .env\n```\n\nLinux\u002FmacOS：\n\n```bash\ncp .env.example .env\n```\n\n编辑 `.env`：\n\n```env\nDEEPSEEK_API_KEY=your_deepseek_api_key\nDEEPSEEK_MODEL=deepseek-v4-flash\nJIX_INSPECTION_INTERVAL=43200\n```\n\n`.env` 已加入 `.gitignore`，不要将真实 API Key 提交到 GitHub。\n\n也可以直接使用系统环境变量：\n\n```powershell\n$env:DEEPSEEK_API_KEY=\"your_deepseek_api_key\"\npython manage.py runserver\n```\n\n### 5. 启动项目\n\n```bash\npython manage.py runserver\n```\n\n访问：\n\n```text\nhttp:\u002F\u002F127.0.0.1:8000\u002F\n```\n\nDaphne 会同时提供 Django HTTP 服务和 WebSocket 服务。\n\n## 远程服务器接入\n\n1. 打开 Dashboard。\n2. 点击顶部“管理服务器”。\n3. 输入服务器名称、IP、SSH 端口、用户名和密码。\n4. 保存后点击“测试”。\n5. SSH 连接成功后，从顶部服务器下拉框切换监控节点。\n\n远程节点需满足：\n\n- Linux 系统\n- SSH 服务可用\n- 账号可以执行 `top`、`free`、`df`、`cat \u002Fproc\u002Fnet\u002Fdev` 和 `ps`\n- 运行 Flink-Agent 的机器可以访问远程 SSH 端口\n\n## 配置项\n\n| 环境变量 | 默认值 | 说明 |\n| --- | --- | --- |\n| `DEEPSEEK_API_KEY` | 空 | DeepSeek API 密钥 |\n| `DEEPSEEK_API_URL` | `https:\u002F\u002Fapi.deepseek.com\u002Fchat\u002Fcompletions` | DeepSeek Chat API 地址 |\n| `DEEPSEEK_MODEL` | `deepseek-v4-flash` | DeepSeek 模型名称 |\n| `JIX_INSPECTION_INTERVAL` | `43200` | 自动巡检周期，单位为秒 |\n\nDjango 本机采集配置位于 `config\u002Fsettings.py`：\n\n| 配置 | 默认值 | 说明 |\n| --- | --- | --- |\n| `AGENT_COLLECT_INTERVAL` | `1.0` | 本机采集周期，单位为秒 |\n| `AGENT_HISTORY_LIMIT` | `120` | 后台历史队列最大长度 |\n\n## API 概览\n\n| 方法 | 地址 | 说明 |\n| --- | --- | --- |\n| `GET` | `\u002Fapi\u002Fservers\u002F` | 获取服务器列表 |\n| `POST` | `\u002Fapi\u002Fservers\u002F` | 添加远程服务器 |\n| `PUT\u002FPATCH` | `\u002Fapi\u002Fservers\u002F{id}\u002F` | 更新服务器配置 |\n| `DELETE` | `\u002Fapi\u002Fservers\u002F{id}\u002F` | 删除远程服务器 |\n| `POST` | `\u002Fapi\u002Fservers\u002F{id}\u002Ftest_connection\u002F` | 测试 SSH 连接 |\n| `GET` | `\u002Fapi\u002Fservers\u002F{id}\u002Fsnapshot\u002F` | 获取单次服务器快照 |\n| `GET` | `\u002Fapi\u002Freports\u002F` | 获取最近巡检报告 |\n| `POST` | `\u002Fapi\u002Fjix\u002Fchat\u002F` | 向 @Jix 提问 |\n| `POST` | `\u002Fapi\u002Fjix\u002Finspect\u002F` | 立即执行一次智能巡检 |\n\nWebSocket：\n\n| 地址 | 说明 |\n| --- | --- |\n| `\u002Fws\u002Fmetrics\u002F` | 本机实时指标 |\n| `\u002Fws\u002Fmetrics\u002F{server_id}\u002F` | 远程服务器实时指标 |\n\n## 数据模型\n\n### Server\n\n保存本机和远程服务器信息、连接状态及加密后的 SSH 凭据。\n\n### MetricRecord\n\n保存服务器历史指标。远程采集器按分钟降采样写入，避免 SQLite 数据量无界增长。\n\n### AIReport\n\n保存 @Jix 巡检时间、服务器、风险等级、问题、影响和优化建议。\n\n## 项目结构\n\n```text\nflinkAgentDjango\u002F\n├── manage.py\n├── config\u002F                       # Django 配置、URL、ASGI\u002FWSGI\n├── agent\u002F\n│   ├── collector.py              # 本机 psutil 采集器\n│   ├── cluster_collector.py      # 远程集群后台采集管理器\n│   ├── remote_monitor.py         # Paramiko SSH 采集\n│   ├── server_monitor.py\n│   └── flink_monitor.py          # Flink 监控模块\n├── dashboard\u002F\n│   ├── consumers.py              # WebSocket Consumer\n│   ├── routing.py\n│   ├── views.py\n│   ├── urls.py\n│   ├── tests.py\n│   └── templates\u002Fdashboard\u002F\n├── ai_analysis\u002F\n│   ├── deepseek.py               # DeepSeek API 客户端\n│   ├── analyzer.py               # 上下文、问答和巡检分析\n│   ├── scheduler.py              # 12 小时巡检调度器\n│   ├── views.py\n│   └── urls.py\n├── monitoring\u002F\n│   ├── models.py                 # Server、MetricRecord、AIReport\n│   ├── fields.py                 # 加密字段\n│   ├── serializers.py\n│   ├── views.py\n│   └── migrations\u002F\n├── static\u002Fdashboard\u002F             # Dashboard CSS 与 JavaScript\n├── requirements.txt\n├── .env.example\n└── README.md\n```\n\n## 测试\n\n运行全部自动化测试：\n\n```bash\npython manage.py test --verbosity 2\n```\n\n当前测试覆盖：\n\n- Dashboard 页面访问\n- 本机指标标准化\n- 数据基础设施节点资源模型\n- WebSocket 指标推送\n- 服务器配置接口\n- SSH 密码加密和 API 敏感字段隔离\n- @Jix 问答接口\n- 手动巡检接口\n\n## 安全说明\n\n- 禁止将 DeepSeek API Key 或服务器密码写入源码。\n- `.env`、SQLite 数据库和本地 IDE 文件不应提交到仓库。\n- SSH 密码使用基于 Django `SECRET_KEY` 派生的 Fernet 密钥加密。\n- 修改生产环境 `SECRET_KEY` 前，应先制定 SSH 凭据迁移方案。\n- 当前开发模式会自动接受首次出现的 SSH Host Key；生产环境应维护并校验 `known_hosts`。\n- 生产环境应关闭 `DEBUG`，设置强随机 `SECRET_KEY`、严格 `ALLOWED_HOSTS`，并使用 Redis Channel Layer。\n- 建议在反向代理层启用 HTTPS\u002FWSS、身份认证、访问控制和请求限流。\n\n## 性能设计\n\n- 采集线程与 Web 请求线程分离\n- 远程服务器并发采集\n- WebSocket 增量推送，不轮询整页\n- 前端趋势数据限制为最近 60 个点\n- 后台历史队列限制为 120 条\n- 进程扫描间隔为 5 秒\n- 远程历史指标按分钟持久化\n- ECharts 使用增量数据更新\n\n## 已交付能力\n\n- [x] Django Dashboard 与本机完整性能指标采集\n- [x] 磁盘、网络、I\u002FO 和进程 TOP 10\n- [x] WebSocket 实时数据流\n- [x] 服务器集群管理与远程 SSH 系统采集\n- [x] Kafka、Redis、MySQL、Flink、HDFS、YARN、ZooKeeper、Elasticsearch 集群态势\n- [x] @Jix DeepSeek 智能问答与本地容错回答\n- [x] 干预提醒、状态恢复通知和优化建议\n- [x] 每 12 小时自动巡检与 AIReport 持久化\n- [x] SSH 凭据加密、敏感字段隔离和环境变量配置\n\n## 参与开发\n\n欢迎通过 Issue 提交缺陷、功能建议或新的中间件采集器。提交代码前请先运行：\n\n```bash\npython manage.py check\npython manage.py test\n```\n\n提交中请说明测试环境、复现步骤和涉及的采集节点。\n","2026-07-21 02:30:03","CREATED_QUERY"]