163 lines
4.5 KiB
Markdown
163 lines
4.5 KiB
Markdown
# hy-app-monitor
|
||
|
||
部署在 `deploy` 机器上的轻量监控面板。
|
||
|
||
- 页面端口:`2026`
|
||
- 页面入口:`http://43.164.75.199:2026/`
|
||
- 服务健康:直接探测各业务服务健康接口
|
||
- 主机资源:通过 `TAT` 批量采集 `CPU / 内存 / 磁盘 / 进程数`
|
||
- Nacos:直连 Nacos OpenAPI,列出命名空间、服务和注册实例
|
||
- MongoDB:直连 Mongo,采集 `serverStatus / listDatabases / replSetGetStatus`
|
||
|
||
## 目录
|
||
|
||
- `server.py`:后端入口
|
||
- `monitor/`:Python 模块实现
|
||
- `config/targets.json`:监控目标和实例 ID
|
||
- `static/`:前端页面
|
||
- `scripts/`:启停、自启安装、前台运行脚本
|
||
- `systemd/`:systemd unit
|
||
- `ops/`:TAT 放行和远端部署脚本
|
||
- `.env.example`:运行配置模板
|
||
|
||
## 运行配置
|
||
|
||
项目根目录 `.env` 是唯一运行配置源,不入库。
|
||
|
||
最少需要:
|
||
|
||
```bash
|
||
APP_BIND=0.0.0.0
|
||
APP_PORT=2026
|
||
DEFAULT_REFRESH_INTERVAL_SECONDS=10
|
||
REFRESH_INTERVAL_OPTIONS=5,10,15,30,60
|
||
NACOS_BASE_URL=http://10.2.1.17:8848
|
||
NACOS_NAMESPACE_ID=...
|
||
MONGO_URI=mongodb://...
|
||
DEPLOY_REGION=me-saudi-arabia
|
||
TENCENT_SECRET_ID=***
|
||
TENCENT_SECRET_KEY=***
|
||
```
|
||
|
||
如果你要直接在页面里做“构建镜像 -> 推 Harbor -> 更新服务”,还需要补这几项:
|
||
|
||
```bash
|
||
HARBOR_REGISTRY=10.2.1.3:18082
|
||
HARBOR_PROJECT=likei
|
||
HARBOR_USERNAME=***
|
||
HARBOR_PASSWORD=***
|
||
JAVA_REPO_ROOT=/opt/deploy/sources/chatapp3-java
|
||
GOLANG_REPO_ROOT=/opt/deploy/sources/chatapp3-golang
|
||
UPDATE_DEFAULT_JAVA_GIT_REF=main
|
||
UPDATE_DEFAULT_GO_GIT_REF=main
|
||
```
|
||
|
||
可以直接复制模板:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
## 本地运行
|
||
|
||
```bash
|
||
bash scripts/start.sh
|
||
bash scripts/status.sh
|
||
```
|
||
|
||
访问:
|
||
|
||
```bash
|
||
http://127.0.0.1:2026/
|
||
```
|
||
|
||
## systemd 开机自启
|
||
|
||
在远端项目目录执行:
|
||
|
||
```bash
|
||
bash scripts/install_systemd.sh
|
||
```
|
||
|
||
常用命令:
|
||
|
||
```bash
|
||
bash scripts/restart.sh
|
||
bash scripts/status.sh
|
||
bash scripts/uninstall_systemd.sh
|
||
```
|
||
|
||
## 通过 TAT 放行端口
|
||
|
||
```bash
|
||
python3 ops/open_port_via_tat.py
|
||
```
|
||
|
||
默认会:
|
||
|
||
1. 解析 `deploy` 机器安全组
|
||
2. 通过 `TAT` 放开机器内防火墙
|
||
3. 通过腾讯云 API 放开安全组 TCP `2026`
|
||
|
||
## 通过 TAT 远端部署
|
||
|
||
```bash
|
||
python3 ops/deploy_via_tat.py
|
||
```
|
||
|
||
默认会:
|
||
|
||
1. 拉取或更新 `/opt/hy-app-monitor`
|
||
2. 把本地项目 `.env` 同步到远端项目 `.env`
|
||
3. 创建远端 `.venv`
|
||
4. 安装 `requirements-ops.txt`
|
||
5. 安装并启用 `systemd`
|
||
6. 重启服务并检查 `2026` 监听
|
||
|
||
## 维护完整 Compose
|
||
|
||
默认只刷新本地完整模板:
|
||
|
||
```bash
|
||
python3 ops/sync_runtime_compose.py
|
||
```
|
||
|
||
如果要把完整模板同步到远端业务主机:
|
||
|
||
```bash
|
||
python3 ops/sync_runtime_compose.py --sync-remote
|
||
```
|
||
|
||
模板文件会写到本地 `run/compose_templates/`。
|
||
滚动重启在真正执行 `docker compose up -d --force-recreate --no-deps <service>` 之前,也会先把对应宿主机的完整 `docker-compose.yml` 同步到远端,避免线上 compose 被裁剪成子集。
|
||
|
||
## 服务更新
|
||
|
||
页面里的“服务更新”会直接在当前机器上执行这条链路:
|
||
|
||
1. 从 `JAVA_REPO_ROOT` / `GOLANG_REPO_ROOT` 指向的业务仓按 `git ref` 创建临时 `git worktree`
|
||
2. 本地构建镜像并推送到 Harbor
|
||
3. 取回 Harbor `digest`
|
||
4. 用新 `digest` 更新本地完整 compose 模板
|
||
5. 把完整 compose 下发到目标宿主机
|
||
6. 先在目标机 `docker pull` 新镜像
|
||
7. 最后只对你选中的服务执行 `docker compose up -d --force-recreate --no-deps <service>`
|
||
|
||
说明:
|
||
|
||
- `other` 现在也按 Harbor 业务镜像更新,不再继续依赖本地 `./other/service.jar` 挂载
|
||
- 页面里的“滚动重启”仍然保留,适合只想让配置生效、不涉及代码构建的场景
|
||
- 这条链路默认假设 `hy-app-monitor` 就运行在打包机 / deploy 机上,并且本机已经能访问业务仓、Docker 和 Harbor
|
||
|
||
## 页面内容
|
||
|
||
- 主机:`CPU / 内存 / 磁盘 / 进程数`,带阈值颜色分级
|
||
- 服务:Java / Golang 健康检查和耗时
|
||
- Nacos:命名空间、服务、注册实例、健康状态
|
||
- Nacos 配置:读取当前 namespace 下的配置列表,支持格式校验、在线编辑保存
|
||
- Golang 配置:读取 app 节点当前运行中的 `service.env`,展示 `chatapp3-golang` 实际消费的环境变量并支持保存
|
||
- 服务更新:本地构建选中服务、推送 Harbor、更新完整 compose,并只重建选中的服务
|
||
- 滚动重启:可按服务选择 Java / Golang 节点,逐台重启并等待健康恢复
|
||
- MongoDB:连接、内存、网络、操作计数、复制集、数据库统计
|
||
- 自动刷新:前端可切换刷新间隔,并保存在浏览器本地
|