# monitor-cli **Repository Path**: SoulBGM/monitor-cli ## Basic Information - **Project Name**: monitor-cli - **Description**: 基于 monitor-agent 的批量运维 CLI 工具,通过 HTTP 调用各节点上的 monitor-agent 实现类似 Ansible 的批量运维操作。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-10 - **Last Updated**: 2026-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: 运维, 批量运维, Cli ## README # Monitor-CLI > 基于 monitor-agent 的批量运维 CLI 工具,通过 HTTP 调用各节点上的 monitor-agent 实现类似 Ansible 的批量运维操作。 ## 功能特性 | 功能 | 命令 | 说明 | |------|------|------| | 节点列表 | `list` | 列出所有分组和节点 | | 批量执行命令 | `exec` | 在多个节点上批量执行 shell 命令 | | 交互式执行 | `shell` | 交互式批量执行模式(支持 cd/pwd 状态保持、方向键历史) | | 批量上传 | `upload` | 批量上传文件/目录到远程节点(支持通配符) | | 批量下载 | `download` | 批量下载远程文件/目录到本地(支持远程通配符) | | 远程复制 | `copy` | 从源节点复制文件到目标节点(CLI 中转,scp 风格) | | 进程检测 | `ps` | 批量检测进程存活状态 | | 心跳检测 | `ping` | 批量检测 agent 是否在线 | | 服务器信息 | `info` | 批量获取 CPU/内存/磁盘/JVM 信息 | | 进程资源 | `top` | 批量查看进程 CPU/内存 占用 | ## 架构说明 ``` ┌─────────────────┐ HTTP ┌──────────────────┐ │ Monitor-CLI │ ──────────────────────> │ Monitor-Agent │ │ (本工具) │ POST /exec │ (各节点部署) │ │ │ GET /getFile │ │ │ - hosts.ini 编组│ POST /uploadFile │ - 命令执行 │ │ - 并发控制 │ POST /uploadDir │ - 文件传输 │ │ - 结果汇总 │ GET /info │ - 系统信息采集 │ │ │ GET /heartbeat │ - 进程管理 │ └─────────────────┘ └──────────────────┘ ``` **与 SSH 的区别**: 本工具不使用 SSH 协议,而是通过 HTTP 调用部署在各节点上的 monitor-agent 提供的 REST API 来实现运维操作。 ## 快速开始 ### 1. 构建 ```bash cd monitor-cli mvn clean package -DskipTests ``` ### 2. 配置 hosts.ini 在当前目录创建 `hosts.ini` 文件: ```ini [web] web1 http_host=10.1.7.101 http_port=9300 web2 http_host=10.1.7.102 http_port=9300 [db] db1 http_host=10.1.7.201 http_port=9300 db2 http_host=10.1.7.202 http_port=9300 [all:vars] http_port=9300 ``` ### 3. 使用 ```bash # 方式1: 使用启动脚本 chmod +x bin/monitor-cli bin/monitor-cli list bin/monitor-cli exec -g web "ls -la /home/app" # 方式2: 直接使用 java -jar java -jar target/monitor-cli-1.0-SNAPSHOT.jar list java -jar target/monitor-cli-1.0-SNAPSHOT.jar exec -g web "systemctl status nginx" ``` ## 命令详解 ### list - 列出节点 ```bash # 列出所有分组和节点 monitor-cli list # 指定 hosts.ini 文件 monitor-cli list -H /path/to/hosts.ini ``` ### exec - 批量执行命令 ```bash # 在 web 组所有节点执行命令 monitor-cli exec -g web "ls -la /home/app" # 多组执行 monitor-cli exec -g "web,db" "df -h" # 所有节点执行 monitor-cli exec -g all "uptime" # 指定并发数 monitor-cli exec -g web -f 10 "ps -ef | grep java" # 设置超时 (秒) monitor-cli exec -g web -t 60 "./start.sh" # 直接指定目标节点 (不使用 hosts.ini 文件) monitor-cli exec -i 10.1.7.101:9300 "hostname" # 执行多个命令 monitor-cli exec -g web "cd /home/app && ./stop.sh && ./start.sh" ``` ### shell - 交互式执行 ```bash # 进入交互模式 monitor-cli shell -g web # 交互模式中输入命令: monitor-cli> uptime monitor-cli> df -h monitor-cli> cd logs monitor-cli> ls -la # 实际在 logs 目录下执行 monitor-cli> pwd # 显示当前目录 monitor-cli> exit ``` **交互模式特性:** - 支持 `cd` 切换目录,后续命令自动在目标目录下执行 - 支持 `pwd` 查看当前目录 - 支持 `↑↓` 方向键浏览历史命令 ### upload - 批量上传 ```bash # 上传单个文件 monitor-cli upload -g web ./app.jar /home/app/ # 上传目录 (自动打包为 ZIP -> 上传 -> 远程解压) monitor-cli upload -g web ./config /home/app/config/ # 上传通配符文件 monitor-cli upload -g web "/home/source/*.jar" /home/app/ # 指定并发数 monitor-cli upload -g db -f 3 ./mysql.conf /etc/mysql/ ``` ### download - 批量下载 ```bash # 下载文件 (每个节点保存到以节点名命名的子目录) monitor-cli download -g web /home/app/logs/app.log # 下载目录 (agent 自动打包为 ZIP) monitor-cli download -g web /home/app/logs # 下载远程通配符文件 monitor-cli download -g web "/home/certs/*.crt" -d ./backup/certs # 指定保存目录 monitor-cli download -g web /home/app/config -d ./backup/config ``` ### copy - 远程复制 ```bash # 从 web1 节点复制配置到 web 组所有节点 (scp 风格) monitor-cli copy web1:/home/app/config /home/app/config -g web # 从 db-master 复制数据到 db 组 monitor-cli copy db-master:/home/app/data /home/app/data -g db # 复制远程通配符文件 monitor-cli copy web1:/home/certs/*.crt /home/certs -g web ``` ### ps - 进程检测 ```bash # 检测 Java 进程 monitor-cli ps -g all "java" # 检测多个进程 (支持 name:port 格式) monitor-cli ps -g web "java:8080,nginx:80" # 检测 ZooKeeper monitor-cli ps -g db "QuorumPeerMain:2181" ``` ### ping - 心跳检测 ```bash # 检测所有节点 agent 是否在线 monitor-cli ping -g all # 检测特定组 monitor-cli ping -g web ``` ### info - 服务器信息 ```bash # 获取所有节点的服务器信息 monitor-cli info -g all # 获取特定组的信息 monitor-cli info -g db ``` ### top - 进程资源占用 ```bash # 查看前 10 个进程 monitor-cli top -g all # 查看前 5 个进程 monitor-cli top -g all -n 5 # 按进程名过滤 monitor-cli top -g all -p java # 组合使用 monitor-cli top -g web -n 5 -p java ``` ## hosts.ini 配置格式 ### 完整格式 ```ini [web] web1 http_host=10.1.7.101 http_port=9300 web2 http_host=10.1.7.102 http_port=9300 [db] db1 http_host=10.1.7.201 http_port=9300 db2 http_host=10.1.7.202 http_port=9300 [all:vars] http_port=9300 ``` ### 简写格式 ```ini [web] web1 http_host=10.1.7.101 web2 http_host=10.1.7.102 ``` ## service 脚本集合 `service/` 目录下提供了一组 shell 脚本,封装了常用的 monitor-cli 操作: | 脚本 | 说明 | |------|------| | `check.sh` | 检测服务进程存活 | | `start.sh` | 批量启动远程服务 | | `stop.sh` | 批量停止远程服务 | | `statistics.sh` | 统计日志匹配行数 | | `batch_statistics.sh` | 全天逐小时统计日志 | | `batch_tail.sh` | 查看日志尾部匹配行 | | `batch_export.sh` | 导出日志到本地文件 | | `upload.sh` | 上传整个服务目录 | | `upload-bin.sh` | 上传所有 .sh 脚本 | | `upload-config.sh` | 上传 config 目录 | | `upload-jar.sh` | 上传所有 .jar 文件 | | `upload-lib.sh` | 上传 lib 目录 | | `rm.sh` | 删除整个服务目录 | | `rm-bin.sh` | 删除所有 .sh 文件 | | `rm-config.sh` | 删除 config 目录 | | `rm-jar.sh` | 删除所有 .jar 文件 | | `rm-lib.sh` | 删除 lib 目录 | ### service 配置 编辑 `service/config`: ```bash # 本地拷贝路径 source_path=/home/source/monitor-agent # 远程部署路径 target_path=/home/project/monitor-agent # 部署服务名称 service_name=monitor-agent # 执行目标 (默认 all 分组) group=all # nodes=web1,web2 # 直接指定节点名 ``` ### service 使用示例 ```bash cd service/ # 检测进程 ./check.sh # 启动/停止服务 ./start.sh ./stop.sh # 统计日志 ./statistics.sh -e "Exception" ./statistics.sh -d 2024-01-15 -h 14 -l error -e "Timeout" ./batch_statistics.sh -d 2024-01-15 -h all -l error -e "Timeout" # 查看日志尾部 ./batch_tail.sh -e "Exception" # 导出日志 ./batch_export.sh -e "Exception" -o ./export.log # 上传 ./upload.sh ./upload-jar.sh # 删除 ./rm.sh ./rm-config.sh ``` ## Web 控制台 `monitor-cli-web/` 目录提供了基于浏览器的 Web 控制台: ```bash cd monitor-cli-web python3 server.py --port 8080 --cli-path /path/to/monitor-cli.jar ``` 功能: - 命令帮助文档 - 交互式命令生成器 - 在页面上直接执行命令并显示结果 ## 通用参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `-H, --hosts` | hosts 配置文件路径 | `./hosts.ini` | | `-g, --group` | 目标分组或节点名 | (必填) | | `-i, --host` | 直接指定节点 IP:port | (可选) | | `-f, --forks` | 并发数 | `5` | | `-t, --timeout` | 读取超时(秒) | `30` | | `-h, --help` | 显示帮助 | - | | `-V, --version` | 显示版本 | - | ## 注意事项 1. **安全性**: monitor-agent 当前没有认证机制,请确保部署在内网环境或通过防火墙限制访问 2. **大文件传输**: 上传/下载大文件时建议适当增大超时时间 (`-t` 参数) 3. **并发控制**: 节点数量多时建议控制并发数 (`-f` 参数),避免压垮网络或 agent ## 与 Shell 脚本的对比 | 维度 | Shell 批量脚本 | Monitor-CLI | |------|---------------|-------------| | 通信协议 | SSH | HTTP (通过 agent) | | 执行方式 | 串行 for 循环 | 线程池并发 | | 节点管理 | 静态 ips.txt | INI 分组配置 | | 错误处理 | 基本的 grep 过滤 | 超时控制 + 结果汇总 | | 文件传输 | SCP | HTTP 上传/下载 | | 远程复制 | 不支持 | CLI 中转 | | 交互模式 | 不支持 | 支持 (shell 命令) | | 方向键历史 | 不支持 | 支持 | | cd 状态保持 | 不支持 | 支持 |