Browse Source

更新readme和版本

v2
lxb 4 months ago
parent
commit
65ee80f50c
  1. 143
      README.md
  2. BIN
      pics/demo.png
  3. 2
      version.py

143
README.md

@ -1,69 +1,96 @@
# 1. 简介 # 1. 简介
在网页上同时查看多个服务器的信息(CPU、网络、内存、硬盘、显卡) 在网页上同时查看多个服务器的信息(CPU、网络、内存、硬盘、显卡)
大致原理是后端的python程序通过ssh连接服务器,定期通过终端解析获取所需数据存在字典中,然后前端网页定期获取字典的内容进行可视化 分为服务端和客户端,客户端向服务端发送本机数据,服务端整理所有客户端的数据,**服务端不再需要保存客户端的密钥**
![](pics/demo.png) ![](pics/demo.png)
# 2. 安装
## 2.1. 运行环境 **Tips:** 将鼠标悬浮在`网络`、`CPU占用率`、`GPU使用情况的用户`上时可以查看更详细的信息。
即运行后端程序所需的环境,可在conda中安装虚拟环境,linux和windows都可以。 # 2. 开发环境
可在conda中安装虚拟环境,linux和windows都可以。
```bash ```bash
pip install flask flask-cors psutil -i https://pypi.tuna.tsinghua.edu.cn/simple pip install flask flask-cors psutil -i https://pypi.tuna.tsinghua.edu.cn/simple
``` ```
## 2.2. 服务器环境
即需要被查看的服务器上所安装的环境。
因为本质上是通过ssh连接服务器,然后通过命令来获取相应的信息,有的命令可能服务器系统上不自带需要另外安装,否则无法获取到对应的数据。 # 3. 运行部署
- **ifstat**,用于获取网络数据的工具,可通过apt安装(如果不需要显示网络数据则不用安装)。并且需要在服务器上运行一下命令,查看哪个网卡才是主要的,写到配置文件里去(如果不需要查看网络信息可以不写)。 客户端的机器上 **可能** 还需要通过APT安装一下`gpustat`,最好是`1.1.1`版的,`0.6.0`貌似会出问题。
- **gpustat**,用于获取显卡上用户的使用情况,也可通过apt安装。
- **nvidia驱动**,需要需要安装N卡的驱动,能够通过`nvidia-smi`来获取显卡信息即可(AMD的应该就没办法了)。
其中这个ifstat查看网卡的步骤如下:通过apt安装完成之后,在终端输入`ifstat`,可以看到类似下面的输出(ctrl+c停止),因为一般会不只一个网卡,而且名称也会不一样。此时可以看一下哪个名称的网卡有数据变化,比如下方的就是`eno2`,可以写到配置文件里。 可以使用`pyinstaller`将python程序打包得到客户端和服务端的可执行程序,则不再需要安装运行环境。如果不打包直接用python执行的话就要安装前面的开发环境。
```bash
pyinstaller --onefile client.py
pyinstaller --onefile server.py
``` ```
eno1 eno2 br-6c8650526aef docker0 veth1d3300f 执行命令之后,可以`dist`目录内找到两个可执行文件,将`client`文件放到客户端的合适的地方,`server`放到服务器的合适的地方。客户端指的就是需要获取数据的机器,服务端就是网页所在的机器。
KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out 以及放置对应的`client_config.json`和`server_config.json`。
0.00 0.00 3.31 1.96 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 2.23 1.52 0.00 0.00 0.00 0.00 0.00 0.00 ## 3.1. 服务器
0.00 0.00 7.56 8.03 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 4.00 4.55 0.00 0.00 0.00 0.00 0.00 0.00 执行以下命令即可,注意server和json要改为实际的路径。可以用screen或者systemctl来保持后台执行,推荐使用systemctl实现开机自启。
0.00 0.00 3.66 0.19 0.00 0.00 0.00 0.00 0.00 0.00 ```bash
0.00 0.00 8.34 8.26 0.00 0.00 0.00 0.00 0.00 0.00 /home/lxb/projects/Tool_CheckGPUsWeb/dist/server --cfg /home/lxb/projects/Tool_CheckGPUsWeb/server_config.json
0.00 0.00 8.25 4.78 0.00 0.00 0.00 0.00 0.00 0.00 ```
其中`server_config.json`的内容如下:
```json
{
"host": "0.0.0.0",
"port": 15002,
"server_list":["76", "174", "233", "222"],
"note_dict":{
"76" : "这是一个公告内容"
},
"api_name": "api"
}
``` ```
## 2.3. 后端部署 - host:不用改。
安装好运行环境且设置好配置文件后,直接开一个screen,然后在目录下运行`python app.py`即可。(需要确保当前机器能够访问到所需要监视的服务器) - port:改成合适的端口,服务器记得要开放这个端口。
- server_list:所查询的服务器名称列表,客户端访问的时候只有下列对应的名称才会被处理。
- note_dict:公告字典,可以给对应服务器显示公告。
- api_name:api的名称,保持服务器和客户端统一即可。
修改配置文件之后需要**重启**程序才能生效。
需要注意的是,app.py内最后几行可以找到`app.run(debug=True, host='127.0.0.1', port=port)`这行代码,可以将debug改为`False`,host可以改为`0.0.0.0`(在云服务器上部署时貌似需要改为这个),port可以按需修改。并且需要在防火墙上打开对应端口。可修改`check_interval`变量,默认为2,代表检测一次服务器信息的间隔。 ## 3.2. 客户端
执行以下命令即可,注意client和json要改为实际的路径。可以用screen或者systemctl来保持后台执行,推荐使用systemctl实现开机自启。
```bash
/home/lxb/projects/ServerInfo-client/client --cfg /home/lxb/projects/ServerInfo-client/client_config.json
```
其中配置文件默认名称为`serverList.json`,需要自己创建,格式参考`serverList_example.json`,具体规则如下: 其中`client_config.json`中的内容如下,
- title:服务器名称,用于显示。
- ip:服务器ip地址,用于连接。
- port:访问的端口,一般是22,如果访问容器等则按需修改。
- username:用于登录的账户名称。
- password:用于登录的账户密码。
- key_filename:用于登录的账户密钥**路径**。(password和key_filename只需要设置一个即可,如果服务器只能使用密钥登陆则填密钥即可)
- network_interface_name:网卡名称。(非必须项,如果不需要可视化网速则不需要设置)
- storage_list:需要查看存储空间使用情况的路径list。(非必须项,无论有没有设置都会默认检查根目录的使用情况)
```json ```json
{ {
"title": "SERVER_76", "server_url": "http://10.1.16.174:15001",
"ip": "123.123.123.76", "title": "174",
"port": 22, "interval": 3.0,
"username": "lxb", "note": "",
"password": "abcdefg", "enable": ["gpu", "cpu", "memory", "storage", "network"],
"key_filename": "/home/.ssh/id_rsa", "storage_list":[
"network_interface_name": "eno2", "/",
"storage_list": [
"/media/D", "/media/D",
"/media/E",
"/media/F" "/media/F"
] ],
"api_name": "api"
} }
``` ```
- server_url:访问服务器的路径,即IP+端口,根据情况修改。
- title:客户端本机的名称,只有这个名称在服务器的server_list中才会被处理。(那是不是任一个客户端程序设置到其他的title就会干扰其他服务器数据的显示?**是的**,除了这个title没有做其他验证,只能是人工确保一下每个客户端有单独的title)
- interval:获取信息的间隔
- note:公告,会与在服务器那边设置的公告合并显示。
- enable:开启检测的内容,如果不需要检测某个数据删除掉即可,目前只支持`gpu`、`cpu`、`memory`、`storage`、`network`。
- storage_list:检测的硬盘的路径,需要检测哪条路径就加到这个上面。
- api_name:与服务器保持一致即可,不然无法正常访问。
修改配置文件之后需要**重启**程序才能生效。
开启运行之后,如果`serverList.json`有修改,需要重新启动app.py才能生效。 ## 3.3. 网页部署
> **注意**,网页部署这一块的文档可能还存在着不少问题,主要是当时是用GPT等工具辅助的搞的,现在再写这个文档已经过了好久细节记不清了。还有nginx这里写的也是用容器,但是好像不用容器的话会更好一些。
>
> 这部分文档还需要优化。
## 2.4. 网页部署
可以使用docker运行一个nginx的容器来简单的部署这个网页。 可以使用docker运行一个nginx的容器来简单的部署这个网页。
首先安装docker,安装完之后可执行命令`docker run -d -p 80:80 -v /home/lxb/nginx_gpus:/usr/share/nginx/html --name nginx_gpus nginx:latest`,注意**按需修改命令**,具体可修改内容如下。 首先安装docker,安装完之后可执行命令`docker run -d -p 80:80 -v /home/lxb/nginx_gpus:/usr/share/nginx/html --name nginx_gpus nginx:latest`,注意**按需修改命令**,具体可修改内容如下。
```bash ```bash
@ -74,21 +101,25 @@ docker run -d \
nginx:latest nginx:latest
``` ```
**另外需要**将index.html中的fetchData函数内的地址替换为对应后端的ip+端口。(`fetch('<替换这里>/all_data')`) 将web目录下的内容放到数据卷的对应位置。
然后把`index.html`放入数据卷中,替换掉原来的。然后访问主机`ip:映射的端口号`,如`123.123.123.123:80`(默认8080的话可以不输入)即可打开网页 有域名的话也可以搞一个反向代理,可参考 [服务器上使用Nginx部署网页+反向代理](http://blog.lxblxb.top/archives/1723257245091)
另外可以修改setInterval的时间,即多久访问一次后端,建议时间不要小于后端的check_interval,不然经常获取的也是没有更新的数据浪费了。 **特别的**,`web/js/script.js`中有如下的代码,是通过`internal`来修改访问的URL,以实现访问内网的时候就采用内网的地址访问服务器,避免在内网的时候访问公网。这部分也要按需的修改一下。
```javascript ```js
// 页面加载时获取数据并定时刷新 // 根据环境变量设置API URL
document.addEventListener('DOMContentLoaded', function() { if (environment === 'internal') {
fetchData(); apiURL = 'http://10.1.16.174:15001';
setInterval(fetchData, 3000); // 每3秒刷新一次数据 } else {
}); apiURL = 'http://gpus.lxblxb.top';
}
```
以及nginx那边也需要一些配置,大概是设置下面的内容。好像还有一个地方设置成`internal`的?时间太久了不记得了。
```bash
set $env "public";
add_header X-Environment $env;
``` ```
有域名的话也可以搞一个反向代理,可参考 [服务器上使用Nginx部署网页+反向代理](http://blog.lxblxb.top/archives/1723257245091)。 # 4. 其他
- `永辉`帮忙搞了一下顶部checkbox布局的问题(在这一版中没有加上checkbox)。
# 3. 其他
- `永辉`帮忙搞了一下顶部checkbox布局的问题。
- 参考`治鹏`的方法加了每张显卡的用户使用的情况。 - 参考`治鹏`的方法加了每张显卡的用户使用的情况。

BIN
pics/demo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 558 KiB

After

Width:  |  Height:  |  Size: 754 KiB

2
version.py

@ -1 +1 @@
version = "0.1.0.20241209_beta" version = "0.1.1.20250317_beta"
Loading…
Cancel
Save