# stat-all
**Repository Path**: webshare520/stat-all
## Basic Information
- **Project Name**: stat-all
- **Description**: stathub 服务管理工具 可管理java、spark、python、.net等服务
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2024-10-08
- **Last Updated**: 2024-10-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# STAT hub
## 1.简要说明
STAT hub是一个基于Java的集群管理平台,他可以做服务分发、进程守护、健康检测、资源分配。STAT hub可以托管任意进程,可以是你自己开发的服务,也可以是开源的Tomcat、Kafka,或者是某个遗留系统,唯一的要求是进程需要以foreground方式运行(一般都支持,即使不能支持也只需要做很少的改动)。STAT hub的主要功能有:
- 节点管理:管理集群中的节点,掌握节点的状态,了解每个节点上运行了哪些进程;
- 应用管理:创建和管理应用,制定应用的分配规则,了解进程的数量和分配情况。
STAT hub分为master和agent两个部分。master提供应用操作界面,用户可以编排服务;agent运行在工作节点上,守护工作进程。master和agent之间使用HTTP协议通信。
## 2.运行环境
- 操作系统
- master:基于纯Java环境,可以在大部分操作系统上运行:Windows、Linux、macOS
- agent:Linux操作系统,内核版本2.6.24以上,x86或arm架构,32或64位都经过测试;
- 基础环境:Java 1.8+
## 3.构建下载
### 3.1 源码编译
代码地址:
https://github.com/lane-cn/stat
运行构建命令:
```
mvn package
```
得到构建包:
- agent/target/stat-agent-1.0.0-SNAPSHOT.jar
- server/target/stat-server-1.0.0-SNAPSHOT.jar
### 3.2 下载
下载构建包:
- http://121.199.25.213/stat/stat-agent-1.0.0-SNAPSHOT.jar
- http://121.199.25.213/stat/stat-server-1.0.0-SNAPSHOT.jar
## 4.启动运行
### 4.1 master
启动master进程:
```
java -jar stat-server-1.0.0-SNAPSHOT.jar
```
完整的启动参数:
| 参数 | 说明 | 默认值 |
| --- | --- | --- |
| server.port | 服务端口 | 51026 |
| store.directory | 数据存储路径 | ${HOME}/.stat_server |
| elastic.http.port | 内置Elasticsearch存储端口(HTTP) | 51027 |
| elastic.tcp.port | 内置Elasticsearch存储端口(TCP) | 51028 |
启动后在以下位置提供服务:
| 服务地址 | 说明 |
| --- | --- |
| http://master:51026 | 用户界面 |
| http://master:51026/_plugin/head | Elasticsearch数据管理界面 |
| http://master:51027 | Elasticsearch HTTP服务端口 |
| tcp://master:51028 | Elasticsearch TCP服务端口 |
### 4.2 agent
启动agent进程:
```
java -jar stat-agent-1.0.0-SNAPSHOT.jar --master.address=http://master:51026
```
完整的启动参数:
| 参数 | 说明 | 默认值 |
| --- | --- | --- |
| master.address | master位置。可以不指定,以独立模式运行 | |
| server.port | 服务端口 | 51025 |
| store.directory | 数据存储路径 | ${HOME}/.stat_agent |
| agent.address | 一般情况下agent可以自动报告自己的地址。在某些环境下无法获取正确的IP地址,需要指定agent.address参数 | |
启动后在以下位置提供服务:
| 服务地址 | 说明 |
| --- | --- |
| http://agent:51025 | 用户界面 |
## 5.开始使用
### 5.1 节点
#### 5.1.1 定义
agent启动后向master报告节点信息。节点信息如下:
```
{
"hostname": "hostname1",
"agentAddress": "http://192.168.1.165:51025",
"os": {
"name": "Mac OS X",
"version": "10.13.1",
"cpus": 4,
"architecture": "x86_64"
},
"memory": {
"total": 8589934592,
"ram": 8589934592
},
"networks": [{
"address": "192.168.1.165",
"name": "en4",
"mtu": 1500,
"broadcast": "192.168.1.255",
"description": "en4",
"distination": "0.0.0.0",
"flags": 34915,
"hwaddr": "00:9A:9F:9F:A6:EB",
"metric": 0,
"netmask": "255.255.255.0",
"type": "Ethernet"
}],
"disks": [{
"dirName": "/",
"devName": "/dev/disk1s1",
"flags": 0,
"option": "rw,local,rootfs",
"sysTypeName": "apfs",
"type": 1,
"typeName": "none",
"total": 250790436864
},{
"dirName": "/private/var/vm",
"devName": "/dev/disk1s4",
"flags": 0,
"option": "rw,noexec,noatime,local",
"sysTypeName": "apfs",
"type": 1,
"typeName": "none",
"total": 250790436864
}],
"tags": [
"appserver",
"ssd"
]
}
```
标签属性可以在用户界面上修改;其他信息是自动收集的,不用修改。
#### 5.1.2 检索
节点检索可以用来对节点进行查询和管理,也可以用来对进程运行位置进行规划。使用全文检索语法对节点进行检索,最简单的检索语法是一个词,比如`hostname1`、`appserver`。复杂一些的检索可以使用通配符,比如这个通配符,可以返回所有的节点:
```
*
```
用这个通配符,可以返回所有以“hostname”开头的节点
```
hostname*
```
可以使用通配符查询IP地址段:
```
192.168.1.*
```
可以在查询语法中加上属性,这样查询更加精确:
```
networks.address:192.168.1.165
```
可以准确指定一个地址段,这样:
```
networks.address:[192.168.1.100 TO 192.168.1.150]
```
对数值属性可以查询数值范围,比如要查询CPU大于8核的节点:
```
os.cpus:>8
```
可以关联组合多个查询语法,比如要查询内存大于8G,并且地址在某个段内的节点,可以这样:
```
memory.total:>8000000000 AND networks.address:[192.168.1.100 TO 192.168.1.150]
```
可以用标签属性查询。为不同用途的节点添加标签,然后按照标签进行节点管理和应用编排,这是一个好办法:
```
tags:appserver AND tags:hpc
```
### 5.2 应用
#### 5.2.1 部署
应用是一个持续运行的服务,可以运行在多个节点上,每个节点上可以运行多个进程。应用定义了这些进程的启动运行参数。在STAT hub上部署一个应用:
```
{
"name": "http_server",
"toProcess": "python",
"workingDirectory": "/opt",
"envs": {
},
"args": [
"http_server.py"
],
"ports": [
0,
0
],
"killSignal": 15,
"uris": [
"http://121.199.25.213/stat/http_server.py"
],
"healthChecks": [{
"initialDelaySeconds": 60,
"intervalSeconds": 20,
"maxConsecutiveFailures": 3,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"timeoutSeconds": 20
}],
"resAlloc": null
}
```

`http_server.py`是一个Python脚本,它启动一个HTTP监听端口。agent运行命令启动进程,在Linux环境下,命令会封装成`/bin/sh -c python http_server.py 8080`形式。进程启动后,agent会获取进程的`stderr`和`stdout`输出流。
agent在启动前会检查`uri`指定的位置。如果有更新的文件,把文件下载到本地工作目录。如果文件是`*.zip`格式,agent会尝试对文件进行解压。
可以指定进程使用的端口。`0`表示随机端口,由agent选择。多个端口输入的时候用逗号(半角)分隔。
agent对进程健康情况进行检查。进程启动60秒后,每隔20秒对第0个端口发起一个HTTP请求,检查请求的返回代码。如果连续3次返回错误代码,就杀死进程重新启动。
agent为进程分配必要的资源,包括内存、CPU核数、磁盘空间。//TODO 资源分配未实现
#### 5.2.2 编排
编排是控制服务的运行位置和进程数量。

运行节点控制服务运行的位置,输入节点检索条件,默认的条件是`*`,代表所有节点。计划进程数控制服务运行的进程数。
应用启动后,master会按照编排规则自动分配服务进程。
## 6.待办事项
[ ] agent资源控制,使用cgroup控制进程使用的资源
[ ] Windows系统支持:守护进程在windows环境下得不到工作进程的pid