GridPerch 使用教程
开箱即用的轻量级分布式运维监控系统 · 服务端 + 采集端协同工作,可监控数千台主机
产品概述
GridPerch 是一款开箱即用的轻量级分布式运维监控系统,主打极简部署、自动化运行、零模板零脚本。 服务端与采集端协同工作,可监控数千台主机。
核心监控指标
| 指标 | 说明 | 采集端 |
|---|---|---|
| CPU 使用率 | 整体使用率,采样 1 秒取平均 | 每秒 |
| CPU 温度 | 读取内核 hwmon 温度通道,取 CPU 相关传感器最大值 | 每轮 |
| 内存使用率 | 物理内存占用百分比 | 每轮 |
| 磁盘容量 | 逐分区容量与使用率 | 每轮 |
| 磁盘 IO | 读写速率(KB/s)与 IOPS | 每轮 |
| 硬盘 SMART | 整体健康度,需要 smartmontools | 每轮 |
| 系统负载 | 1 / 5 / 15 分钟负载(Windows 恒为 0) | 每轮 |
| MAC 地址 | 主网卡物理地址 | 每轮 |
| 连接数量 | TCP 连接总数与已建立数 | 每轮 |
| 网卡流量 | 上下行速率(KB/s)与包速率 | 每轮 |
| 硬件系统信息 | 操作系统、CPU 型号、核数、主机名 | 每轮 |
支持的资源监控
进程存活检查(按名称),可配置异常时自动执行恢复命令。
SHA256 指纹基线比对,默认改动后持续告警直到还原或重新基线。
本地端口监听检查,从采集端本机视角发起。
关键字与正则增量监控,只读新增内容不重复告警。
容器数量与状态;指定容器后可采集 CPU 与内存并设阈值。
MySQL / Redis / Kafka / RabbitMQ / Elasticsearch 真实建连探测。
MySQL 真实连接并执行 SQL,可做行数与状态校验。
HTTP 接口可用性与状态码校验,支持期望状态码与响应关键字。
可视化与告警
| 能力 | 说明 |
|---|---|
| 自研监控大屏 | ECharts 可视化,8 套模板,支持全屏投屏,每套模板有独立地址 |
| 统计分析图表 | CPU / 内存 / 磁盘 IO / 网络流量 / 系统负载趋势,支持 1 小时到 7 天窗口 |
| 指令下发批量执行 | 向指定主机批量下发 shell 命令,agent 拉取执行并回传退出码与输出 |
| 告警信息推送 | 邮件、钉钉、企业微信、飞书、Slack、通用 Webhook |
| 告警闭环 | 认领 / 释放、处理备注、按「主机 + 监控项 + 级别 + 时间段」静默、未认领超时催办 |
| 内置使用教程 | 本页面:各系统部署指南 + 文件挂载清单 |
告警闭环怎么用
告警的价值不在于「发出来」,而在于「有人管、有记录、有结论」。控制台「告警」页提供四件事:
| 动作 | 效果 |
|---|---|
| 认领 | 点一下即记下「谁在处理、什么时候接手的」,避免两个人同时查同一件事。重复认领会提示当前处理人 |
| 处理备注 | 写下排查过程与结论,备注直接显示在告警内容下方,导出 CSV/Excel 一并带出 |
| 静默 | 值班期间做割接、已知问题复发时用。规则按主机 + 监控项 + 级别 + 时间段匹配,静默期内告警照常入库留痕,只是不发邮件、不推机器人;到期自动恢复,也可随时删除立即恢复 |
| 催办 | 告警超过设定分钟数仍无人认领,会再推一轮带「未认领催办」前缀的通知,防止半夜的告警沉在聊天记录里没人跟。系统设置 → 告警与提醒 里配置,填 0 关闭 |
关键特性
| 特性 | 说明 |
|---|---|
| 极轻量 | Go 语言 + SQLite 单文件,服务端常驻内存 20MB 以内 |
| 跨平台一致 | 采集端基于 OSHI 思路的 gopsutil 组件抽象,Linux / Windows / macOS / Unix 行为一致 |
| 上报可调 | 默认每分钟上报一次,间隔由平台统一下发,无需登录主机修改 |
| 全中文 UI | 部署即用,界面与文档全中文 |
| 部署方式 | 支持 Docker Compose / 1Panel / 宝塔面板 / docker 与二进制直接运行 |
架构与端口
┌──────────────┐POST /agent/minTask┌───────────────┐ ┌──────────┐
│ gridperch- │───────────────────►│ gridperch- │────►│ SQLite │
│ agent │ JSON + MD5(token) │ server │ │ 单文件库 │
│ 采集端 │◄───────────────────│ 服务端 / 控制台 │◄────│ 读写分离 │
│ 本地探针│ GET /agent/tasks └───┬───────┬───┘ └──────────┘
└──────────────┘ │ │ 平台代拉(可选)
内嵌静态资源 ▼ ▼
Web 控制台 + 大屏 ┌──────────────────┐
(浏览器) │ 授权系统(独立) │
└──────────────────┘
| 端口 | 协议 | 用途 | 是否必需 |
|---|---|---|---|
9999 | HTTP | 控制台 + 大屏 + 采集端上报 + 安装脚本下发 | 必需 |
9999 | ICMP | 服务端主动探测目标主机连通性 | 按需 |
22 / 3389 / 3306 / 6379 / 5672 … | 各协议 | 服务端探针按监控项配置主动连接目标 | 按需 |
Docker Compose 部署推荐
最省事的方式。整个系统一个容器、一个数据目录,备份就是拷一个目录。
1. 准备目录
mkdir -p /opt/gridperch/data
cd /opt/gridperch
2. 编写 docker-compose.yml
services:
gridperch:
image: gridperch/gridperch:latest
container_name: gridperch
restart: unless-stopped
ports:
- "9999:9999"
volumes:
# SQLite 数据库所在目录,必须挂载,否则容器重建后数据全丢
- ./data:/opt/gridperch/data
# 采集端发布物缓存目录(用于一键安装采集端),可选
- ./releases:/opt/gridperch/releases
environment:
# 监听地址:保持默认,不要写成 127.0.0.1,否则其他主机接不进来
GRIDPERCH_ADDR: ":9999"
# SQLite 文件路径
GRIDPERCH_DB: "/opt/gridperch/data/gridperch.db"
# 采集端通信密钥,两端必须一致,建议部署后立即修改
GRIDPERCH_TOKEN: "请改成你自己的密钥"
# 控制台初始账号密码,仅首次启动生效
GRIDPERCH_ADMIN_USER: "admin"
GRIDPERCH_ADMIN_PASS: "请改成强密码"
# 对外访问地址,反向代理 / 端口映射场景务必显式指定
# 安装脚本与采集端升级下载都用它拼装绝对地址
GRIDPERCH_PUBLIC_URL: "http://192.168.1.10:9999"
# 历史数据保留天数,0 表示永久保留
GRIDPERCH_RETENTION: "30"
# 超过该秒数未上报判定主机离线
GRIDPERCH_OFFLINE_SEC: "180"
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:9999/"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
127.0.0.1 或 localhost 时,
在服务端本机生成的安装命令拷到其他主机执行必然失败。
必须是其他主机能访问到的地址。
3. 启动
docker compose up -d
docker compose logs -f --tail=100
看到 控制台访问地址:http://…:9999 即启动成功,浏览器打开该地址,用上面设置的账号登录。
4. 常用运维命令
docker compose restart gridperch # 重启
docker compose stop gridperch # 停止
docker compose up -d # 启动
docker compose logs -f # 跟踪日志
docker compose pull && docker compose up -d # 拉新版并重建
1Panel 部署
-
安装 Docker 应用
在 1Panel 左侧「应用商店」搜索并安装
Docker(若已安装可跳过)。 -
新建容器
「容器」→「创建容器」,填写:
字段 值 名称 gridperch镜像 gridperch/gridperch:latest重启策略 始终重启 端口映射 主机 9999→ 容器9999文件夹 新建 /opt/gridperch/data挂载 /opt/gridperch/data→/opt/gridperch/data(读写)环境变量 见下方表格 -
设置环境变量
变量 建议值 GRIDPERCH_TOKEN自定义强密钥 GRIDPERCH_ADMIN_USERadminGRIDPERCH_ADMIN_PASS自定义强密码 GRIDPERCH_PUBLIC_URLhttp://服务器IP:9999 -
配置反向代理(可选)
「网站」→「创建网站 → 反向代理」,域名如
monitor.example.com, 代理地址填http://127.0.0.1:9999。 配了反向代理后务必把GRIDPERCH_PUBLIC_URL改成https://monitor.example.com。 -
防火墙放行
服务器防火墙与云安全组都要放行 9999/TCP(或反向代理的 443)。
宝塔面板部署
- 安装 Docker 管理器
「软件商店」→ 搜索
Docker 管理器→ 安装。 - 添加容器
「Docker」→「容器管理」→「添加容器」,镜像填
gridperch/gridperch:latest, 端口映射9999:9999,目录挂载/opt/gridperch/data到/opt/gridperch/data。 - 设置环境变量
同 1Panel,注意
GRIDPERCH_PUBLIC_URL要填对外可达地址。 - 反向代理
「网站」→ 添加站点 → 反向代理到
http://127.0.0.1:9999。 - 放行端口
「安全」→ 添加放行端口
9999。
Linux 二进制部署
不想用容器时,直接跑二进制。服务端只需要 glibc 与一个可写目录。
1. 下载并安装
mkdir -p /opt/gridperch/data && cd /opt/gridperch
curl -fLo gridperch-server https://github.com/sangxi/gridperch/releases/latest/download/gridperch-server-linux-amd64
curl -fLo gridperch-agent https://github.com/sangxi/gridperch/releases/latest/download/gridperch-agent-linux-amd64
chmod +x gridperch-server gridperch-agent
./gridperch-server -version
2. 前台试跑
./gridperch-server \
-addr :9999 \
-db ./data/gridperch.db \
-token '你的通信密钥' \
-user admin -pass '你的控制台密码' \
-public-url 'http://192.168.1.10:9999'
确认能访问 http://服务器IP:9999 后再做成systemd 服务。
3. 注册为 systemd 服务
sudo tee /etc/systemd/system/gridperch.service >/dev/null <<'EOF'
[Unit]
Description=GridPerch 运维监控服务端
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/gridperch
ExecStart=/opt/gridperch/gridperch-server -addr :9999 -db /opt/gridperch/data/gridperch.db -token 你的通信密钥 -user admin -pass 你的控制台密码 -public-url http://192.168.1.10:9999
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now gridperch
sudo systemctl status gridperch --no-pager
-token 会以明文出现在 /etc/systemd/system/gridperch.service 中。
该文件默认只有 root 可读,一般可以接受;若安全要求更高,改用环境文件:
EnvironmentFile=/etc/gridperch/gridperch.env(权限设为 600)。
4. 常用命令
systemctl restart gridperch
journalctl -u gridperch -f # 实时日志
journalctl -u gridperch --since today
Windows 部署
服务端
# 解压到 C:\GridPerch
cd C:\GridPerch
.\gridperch-server.exe -addr :9999 -db .\data\gridperch.db -token 你的通信密钥
注册为开机自启(需管理员 PowerShell):
$action = New-ScheduledTaskAction -Execute 'C:\GridPerch\gridperch-server.exe' `
-Argument '-addr :9999 -db C:\GridPerch\data\gridperch.db -token 你的通信密钥'
$trigger= New-ScheduledTaskTrigger -AtStartup
$principal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -RunLevel Highest
Register-ScheduledTask -TaskName 'gridperch' -Action $action -Trigger $trigger `
-Principal $principal -Force
Start-ScheduledTask -TaskName 'gridperch'
放行防火墙
netsh advfirewall firewall add rule name="GridPerch" dir=in action=allow protocol=TCP localport=9999
采集端日常运维
Start-ScheduledTask -TaskName gridperch-agent # 手动重启
Get-ScheduledTask -TaskName gridperch-agent | Select-Object State # 查看状态(应为 Running)
Get-ScheduledTaskInfo -TaskName gridperch-agent | Select-Object LastRunTime,LastTaskResult
Unregister-ScheduledTask -TaskName gridperch-agent -Confirm:$false # 卸载
文件挂载清单
部署前按这张表核对,避免出现「重启后数据全丢」这类事故。
目录结构
/opt/gridperch/
├── gridperch-server # 服务端二进制(容器内为镜像自带,不用挂)
├── gridperch-agent # 采集端二进制(仅手工部署采集端时需要)
├── data/
│ ├── gridperch.db# SQLite 主库 必须挂载
│ ├── gridperch.db-wal # WAL 日志,与主库同目录
│ └── gridperch.db-shm # 共享内存索引,与主库同目录
├── releases/ # 采集端发布物缓存(可选,用于一键安装采集端)
│ └── gridperch-agent-linux-amd64
└── gridperch-file-baseline.json # 文件防篡改基线(仅采集端,产生在采集端本机)
挂载对照表
| 宿主机路径 | 容器内路径 | 读写 | 必需性 | 不挂的后果 |
|---|---|---|---|---|
/opt/gridperch/data |
/opt/gridperch/data |
读写 | 必需 | 容器重建后所有历史指标、告警、资产、账号全部丢失 |
/opt/gridperch/releases |
/opt/gridperch/releases |
读写 | 可选 | 一键安装采集端时提示「服务端尚未发布 xx/xx 的采集端版本」 |
| — | /etc/localtime |
只读 | 建议 | 容器内时区变成 UTC,告警时间与主机时间差8 小时 |
/opt/gridperch/gridperch-file-baseline.json |
— | 读写 | 仅采集端 | 采集端重启后文件防篡改基线丢失,首次运行会重建基线 |
data 目录必须挂载。SQLite 数据库是整个系统唯一的状态存储,
不挂载等于每次重建容器都从零开始。
时区配置
services:
gridperch:
environment:
TZ: "Asia/Shanghai"
volumes:
- /etc/localtime:/etc/localtime:ro
文件权限参考
| 文件 | 属主 | 权限 |
|---|---|---|
gridperch-server | root | 755 |
gridperch-agent | root | 755 |
data/ | 运行用户 | 750 |
data/gridperch.db | 运行用户 | 640 |
releases/ | 运行用户 | 755 |
| systemd unit | root | 644 |
端口与防火墙
| 系统 | 命令 |
|---|---|
| CentOS / RHEL / Rocky | firewall-cmd --add-port=9999/tcp --permanent && firewall-cmd --reload |
| Ubuntu / Debian | ufw allow 9999/tcp |
| Windows | netsh advfirewall firewall add rule name="GridPerch" dir=in action=allow protocol=TCP localport=9999 |
curl http://服务端IP:9999/,
能返回页面再执行安装命令。这一步能提前 90% 的连通性问题。
一键安装采集端
-
控制台生成命令
登录控制台 → 左侧「监控」→「添加主机」→ 选择系统与架构、填写主机名 → 复制命令。
-
确认目标平台已发布
页面会提前校验该「系统 + 架构」是否已有可下发的采集端版本。 平台是按系统 + 架构分别发布的,
linux/amd64发布过不等于linux/arm64就能装。 -
在目标主机执行
Linux / macOS:
curl -fsSL "http://服务端IP:9999/install.sh?wgToken=密钥MD5&name=web-01" | sudo bashWindows(管理员 PowerShell,单行):
Invoke-Expression (Invoke-WebRequest -UseBasicParsing "http://服务端IP:9999/install.ps1?wgToken=密钥MD5&name=win-01").Content -
脚本自动完成的事
识别系统与架构 → 查询平台下发版本 → 下载二进制 → 校验 SHA256 → 拉取平台下发的运行配置 → 注册开机自启的系统服务 (Linux 用 systemd、macOS 用 launchd、Windows 用计划任务)。
-
确认上线
主机自动出现在「主机监控」列表中,默认每分钟上报一次。
-server / -token-hash / -name 三个必要参数。
通信密钥以 MD5 指纹形式下发,命令行历史与 systemd 单元文件里都不会留下明文口令。
其余运行配置(上报间隔、执行指令开关、更新策略等)全部由平台统一下发并热更新,
改配置不需要登录任何一台主机。
手工部署采集端
不便执行脚本的场景(安全管控、离线环境)可以手工安装。
Linux(systemd)
sudo install -m 0755 gridperch-agent /usr/local/bin/
sudo tee /etc/systemd/system/gridperch-agent.service >/dev/null <<'EOF'
[Unit]
Description=GridPerch 采集端
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/gridperch-agent -server http://服务端IP:9999 -token 你的通信密钥 -name 本机名
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now gridperch-agent
sudo systemctl status gridperch-agent --no-pager
journalctl -u gridperch-agent -f
macOS(launchd)
sudo install -m 0755 gridperch-agent /usr/local/bin/
sudo tee /Library/LaunchDaemons/gridperch-agent.plist >/dev/null <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>gridperch-agent</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/gridperch-agent</string>
<string>-server</string><string>http://服务端IP:9999</string>
<string>-token</string><string>你的通信密钥</string>
</array>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key><string>/var/log/gridperch-agent.log</string>
<key>StandardErrorPath</key><string>/var/log/gridperch-agent.log</string>
</dict>
</plist>
EOF
sudo launchctl load -w /Library/LaunchDaemons/gridperch-agent.plist
卸载
# Linux
sudo systemctl disable --now gridperch-agent
sudo rm -f /etc/systemd/system/gridperch-agent.service /usr/local/bin/gridperch-agent
# macOS
sudo launchctl unload /Library/LaunchDaemons/gridperch-agent.plist
sudo rm -f /Library/LaunchDaemons/gridperch-agent.plist /usr/local/bin/gridperch-agent
# Windows
Unregister-ScheduledTask -TaskName gridperch-agent -Confirm:$false
主机记录会保留,历史数据按服务端保留天数自动清理。
容器内采集宿主主机
需要监控 Docker 所在宿主机的物理指标时,把宿主机根目录挂进容器。
services:
gridperch-agent:
image: gridperch/gridperch-agent:latest
container_name: gridperch-agent
restart: unless-stopped
pid: host
network_mode: host
volumes:
# 只读挂载宿主机根目录,让采集端看到真实的 /proc、/sys
- /:/host:ro,rslave
environment:
- TZ=Asia/Shanghai
command:
- -server=http://服务端IP:9999
- -token=你的通信密钥
- -name=容器宿主机名
ro 一定要加。采集端只需要读 /proc、/sys,
不需要也不应该能修改宿主机文件。
服务端配置项
命令行参数优先于环境变量。完整清单如下。
| 参数 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
-addr | GRIDPERCH_ADDR | :9999 | HTTP 监听地址 |
-db | GRIDPERCH_DB | ./data/gridperch.db | SQLite 文件路径 |
-token | GRIDPERCH_TOKEN | gridperch | 采集端通信密钥,两端必须一致 |
-user | GRIDPERCH_ADMIN_USER | admin | 控制台账号(仅首次启动生效) |
-pass | GRIDPERCH_ADMIN_PASS | gridperch | 控制台密码(仅首次启动生效) |
-retention | GRIDPERCH_RETENTION | 30 | 历史数据保留天数,0 表示永久 |
-purge | GRIDPERCH_PURGE_INTERVAL | 3600 | 历史清理间隔(秒) |
-offline | GRIDPERCH_OFFLINE_SEC | 180 | 超过该秒数未上报判定离线 |
-public-url | GRIDPERCH_PUBLIC_URL | 自动反推 | 对外访问地址,反向代理下务必显式指定;若配成回环 / 内网 / CGNAT 地址,启动日志会警告(避免生成的安装命令写死内网地址导致目标主机连不上) |
-cpu-alert | GRIDPERCH_CPU_ALERT | 90 | CPU 告警阈值(%) |
-mem-alert | GRIDPERCH_MEM_ALERT | 90 | 内存告警阈值(%) |
-disk-alert | GRIDPERCH_DISK_ALERT | 90 | 磁盘告警阈值(%) |
-load-alert | GRIDPERCH_LOAD_ALERT | 10 | 系统负载告警阈值 |
-alert-cooldown | GRIDPERCH_ALERT_COOLDOWN_MIN | 10 | 同类告警去重冷却(分钟) |
-login-alert | GRIDPERCH_LOGIN_ALERT | true | 主机登录用户变化时生成提醒 |
-probe-workers | GRIDPERCH_PROBE_WORKERS | 64 | 服务端主动探测并发度 |
-read-conns | GRIDPERCH_READ_CONNS | 8 | SQLite 读连接池大小 |
-write-queue | GRIDPERCH_WRITE_QUEUE | 8192 | 上报写队列容量 |
-release-dir | GRIDPERCH_RELEASE_DIR | 数据库同级 releases/ | 采集端发布包目录 |
-hub | GRIDPERCH_HUB | 默认内置(地址已内置,无需填写) | 授权中心地址;-hub "" 表示完全离线 |
-hub-token | GRIDPERCH_HUB_TOKEN | 内置 | 授权中心拉取令牌。默认使用程序内置令牌,无需配置;仅当改用自建授权中心时才需覆盖。令牌不以明文出现在源码、二进制、界面与日志中 |
-hub-interval | GRIDPERCH_HUB_INTERVAL_MIN | 5 | 代拉间隔(分钟) |
-hub-auto-update | GRIDPERCH_HUB_AUTO_UPDATE | download | 服务端自更新:download 自动就位 / check 只提示 / off 关闭 |
-hub-ua | GRIDPERCH_HUB_UA | 空 | 访问授权中心的 User-Agent,被网关按 UA 拦截时可覆盖 |
-hub-restart | GRIDPERCH_HUB_RESTART | auto | 平台升级换完二进制后的生效方式:auto(默认)自动重启使新版本生效;off 只替换文件不重启,需人工重启 |
-license-secret | GRIDPERCH_LICENSE_SECRET | 空 | 授权签名密钥;旧格式(WGC- / OPSM1- / OPSM-)需与服务端、授权中心一致,新格式(GRIDPERCH2-)改用内置公钥,无需此值 |
-license | GRIDPERCH_LICENSE_KEY | 空 | 授权码(机器码对应的许可证),启动时导入并校验 |
-license-machine | GRIDPERCH_LICENSE_MACHINE | 自动 | 本机机器码,离线或特殊场景可显式指定 |
-free-hosts | GRIDPERCH_LICENSE_FREE_HOSTS | 10 | 免费额度内可监控的主机数 |
-free-users | GRIDPERCH_LICENSE_FREE_USERS | 3 | 免费额度内可创建的控制台用户数 |
授权中心通信
平台默认已接入内置授权中心(地址已内置在程序里,无需手动填写),每次同步做四件事:
- 拉取并校验导入授权码(授权中心签发后最长一个间隔内生效)
- 下载各平台采集端发布物到本地
releases/,设为下发版本 - 检测到服务端自身有新版本时自动下载、校验 SHA256、替换二进制;就位后按
-hub-restart决定是否自动重启生效(默认自动) - 把采集端升级结果回执授权中心
linux/amd64、linux/arm64、darwin/amd64、darwin/arm64、windows/amd64
共 5 个平台逐个查询补拉,彻底修复「Linux 服务端装不上 Windows 采集端 / 提示『授权系统尚未发布该平台』」的问题。
除当前平台外的其它平台补拉改到后台执行,避免「立即检查更新」被网关超时(HTTP 524)拖死。
授权端下载接口只认 ?token= 查询串鉴权(不认 X-Opsm-Hub-Token 请求头),平台下载时自动带上。
/api/* 路径放行,或改用不挂代理的接口子域,
或直接加 -hub "" 转为完全离线模式(功能不受影响)。
控制台「在线升级」「授权购买」页不再展示授权中心域名,也去掉了跳转到授权站的按钮(1.1.4 起)。
采集端配置项
| 参数 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
-server | GRIDPERCH_SERVER | http://127.0.0.1:9999 | 服务端地址 |
-token | GRIDPERCH_TOKEN | gridperch | 通信密钥,与服务端一致 |
-token-hash | — | 空 | 密钥的 MD5,与 -token 二选一 |
-name | GRIDPERCH_HOSTNAME | 本机主机名 | 平台显示名称 |
-interval | GRIDPERCH_INTERVAL | 60 | 上报间隔(秒),平台下发时被覆盖 |
-update | GRIDPERCH_UPDATE | auto | auto 自动升级 / check 只检查 / off 关闭 |
-update-interval | GRIDPERCH_UPDATE_INTERVAL_MIN | 30 | 版本检查间隔(分钟) |
-allow-command | GRIDPERCH_ALLOW_COMMAND | true | 是否执行服务端下发的指令 |
-remote-config | GRIDPERCH_REMOTE_CONFIG | auto | auto 接受平台下发 / off 只用本地参数 |
-install-dir | GRIDPERCH_INSTALL_DIR | 可执行文件目录 | 升级时替换二进制的目标目录 |
主机重命名与删除 1.1.5 起
「主机监控」列表里每台主机行的操作区(最右侧一排图标)有 重命名(铅笔)与 删除(垃圾桶)两个图标,仅管理员可见;
鼠标悬停在图标上会显示完整说明,其余图标依次是 下发指令(终端)、采集端配置(滑块)、归类(文件夹)。
主机名支持中文、日文等任意语言文字(1.1.5 起修复了中文名被一键安装脚本清成一串 - 的问题)。
重命名
主机名由采集端的 -name 启动参数决定,平台无法远端修改已部署主机上的服务参数。
因此平台侧的做法是:把该主机名下的全部数据迁移到新名字,并登记「旧名 → 新名」映射。
迁移范围包括指标、告警、系统事件、目录归属、采集端配置、监控项里的「作用主机」,以及资产管理中的「关联监控主机」。
删除
删除会连同该主机的全部历史数据一起清理,不可撤销。
注意:若该主机的采集端仍在运行,它会在下次上报时被重新发现——
有活着的采集端就是在线主机。要让它彻底不再出现,请先在目标主机上停用或卸载采集端
(sudo systemctl disable --now gridperch-agent)。
可视化大屏
大屏共 8 套模板,全部用 ECharts 渲染(已内嵌为本地资源,内网离线可用)。
| 模板 | 名称 | 独立地址 | 适合场景 |
|---|---|---|---|
| 1 | 经典三栏 | /screen/1 | 常规值班大屏,左概览中趋势右告警 |
| 2 | KPI 矩阵 | /screen/2 | 领导汇报,十个核心指标一目了然 |
| 3 | 环形指标 | /screen/3 | 整体健康度展示,四个大圆环 |
| 4 | 主机明细 | /screen/4 | 资产规模大、需要逐台核对时 |
| 5 | 告警视图 | /screen/5 | 以告警为核心的处理中心大屏 |
| 6 | 资源全景 | /screen/6 | 十二宫格,趋势与排行一屏看完 |
| 7 | 双屏对称 | /screen/7 | 左右双屏拼接,左主机右告警 |
| 8 | 容量与硬件 | /screen/8 | 容量规划与硬盘健康巡检 |
操作方式
| 操作 | 说明 |
|---|---|
← → | 切换上/下一套模板,地址同步变为 /screen/N |
F | 进入/退出全屏投屏 |
Esc | 退出全屏 |
| 时间窗口下拉 | 切换 1 小时 / 3 小时 / 12 小时 / 1 天 / 7 天 |
| 自动轮播按钮 | 每 30 秒自动切换模板,投屏长时间无人值守时用 |
修改大屏名称
大屏顶部那个名字(以及浏览器标签页标题)不再是写死的,可以改成自己单位的叫法: 系统设置 →「界面定制」→ 大屏标题,填完保存即可。
- 留空时自动使用「系统名称 + 运维监控中心」——只改系统名称也能整体换名,默认安装下仍是「GridPerch 运维监控中心」
- 改完最迟 10 秒(一次刷新周期)就反映到大屏上,不用重开投屏页面
- 标题过长时头部按省略号截断,鼠标悬停可看全称,不会把两侧的时钟、模板下拉挤变形
投屏建议
- 浏览器按
F11或点大屏内的「全屏」按钮,隐藏浏览器边框 - 1920×1080 用模板 2 或 6;3840×1080 双屏用模板 7
- 不同屏幕固定不同地址,例如主屏
/screen/2、副屏/screen/5
图表变成空白?升级到 1.1.6 1.1.6 已修
1.1.6 之前有个缺陷:大屏刚打开时图表正常,约 10 秒后(正好一个自动刷新周期) KPI 数字仍在跳动、所有图表面板却一起变成空白。原因是每次刷新都会重建整块页面 DOM,而 ECharts 实例还绑在被移除的旧容器上,新数据被画到了已经不在页面里的 画布上。1.1.6 起改为「只要容器换了就重建实例」,已彻底修复——升级到 1.1.6 及以上版本即可,无需改动任何配置。
备份与恢复
全部状态都在一个 SQLite 文件里,备份就是拷文件。
在线热备份(推荐)
直接复制 gridperch.db 可能在写入过程中拿到不一致的快照。
用 SQLite 自带的备份命令更稳妥:
# 需要容器内有 sqlite3,或用官方镜像临时起一个
sqlite3 /opt/gridperch/data/gridperch.db ".backup '/opt/gridperch/backup/gridperch-$(date +%F).db'"
停机冷备份(最简单可靠)
docker compose stop gridperch
tar czf /backup/gridperch-$(date +%F).tar.gz -C /opt/gridperch data
docker compose start gridperch
恢复
docker compose stop gridperch
tar xzf /backup/gridperch-2026-10-11.tar.gz -C /opt/gridperch
docker compose start gridperch
建议的定时备份
# 每天 03:17 冷备一次,保留 14 天
17 3 * * * cd /opt/gridperch && \
tar czf /backup/gridperch-$(date +\%F).tar.gz data && \
find /backup -name 'gridperch-*.tar.gz' -mtime +14 -delete
升级与回滚
服务端升级
# Docker
docker compose pull && docker compose up -d
# 二进制(手工替换,务必按下面 5 步)
sudo systemctl stop gridperch
sudo cp /opt/gridperch/gridperch-server /opt/gridperch/gridperch-server.bak
sudo cp 新版/gridperch-server /opt/gridperch/gridperch-server
sudo systemctl start gridperch
手工替换二进制升级步骤
- 备份旧二进制
sudo cp /opt/gridperch/gridperch-server /opt/gridperch/gridperch-server.bak -
清理待生效标记文件
sudo rm -f /opt/gridperch/.gridperch-server.pending不清掉的话,启动时程序会认为「上次升级尚未生效」而回滚到
.bak,表现为「换了二进制又变回旧版」。这一步最关键。 - 替换二进制并赋权
sudo cp 新版/gridperch-server /opt/gridperch/gridperch-server && sudo chmod +x /opt/gridperch/gridperch-server - 重启服务
sudo systemctl restart gridperch - 校验版本
/opt/gridperch/gridperch-server -version
前端(HTML / JS / CSS)通过 //go:embed all:web 编译进同一个二进制,因此升级只需替换这一个二进制文件,无需另行部署静态资源。
平台自升级与自动重启(1.1.3 起)
服务端自身在平台升级换完二进制后会自动重启使新版本生效,不再需要人工 systemctl restart:
- systemd(unit 用
Restart=always):进程退出后由 systemd 用新版本拉起 - Docker Compose(
restart: unless-stopped):容器 PID 1 退出后由 compose 重启容器 - 手工 nohup 启动:自行拉起同参数的新进程后退出;端口被占用会重试,最多 20 秒
- 新版本启动失败:下次启动时自动回滚到
.bak
行为由 -hub-restart 控制:auto(默认)自动重启生效;off 只替换文件不重启,需人工重启。启动时端口被占用会自动重试最多 20 秒,覆盖「新进程先起、旧进程后退」的交接窗口。
Cache-Control: no-cache,升级后浏览器与反向代理不会再用旧前端。
若页面表现异常,仍建议 Ctrl+F5 强制刷新一次。
采集端自动升级
采集端按平台配置的检查间隔(默认 30 分钟)查询版本,发现新版本会自行 下载 → 校验 SHA256 → 替换二进制 → 重启,全程不需要登录目标主机。
- 由 systemd / launchd 托管时直接退出交给服务管理器拉起,不会同时跑两个进程
- 替换走「旧文件改名 → 新文件落位」的原子流程,Windows 上正在运行的 exe 也能安全替换
- 校验不过直接中止并保留原进程;替换失败会回滚旧文件
回滚
采集端发布物按「系统 + 架构」分别登记,每个平台可保留多个版本, 其中一个是下发版本——改它就是灰度或回滚。 在控制台「在线升级」页操作即可。
常见问题排查
部署类
| 现象 | 原因 | 处理 |
|---|---|---|
| 其他主机打不开控制台 | 只监听了回环地址 | 改用 -addr :9999,启动日志会主动提示 |
| 采集端装不上 | 目标主机访问不到服务端地址 | 先在目标主机 curl http://服务端IP:9999/ 自测 |
服务端尚未发布 xx/xx 的采集端版本 | 该「系统 + 架构」没有发布物 | 在「添加主机」页看已发布平台列表,按系统+架构分别发布 |
| Windows 报「无法连接到远程服务器」 | 地址填了 127.0.0.1 或防火墙未放行 | 换成目标机可达地址,放行 9999/TCP |
| Linux 提示未找到 curl | 精简镜像缺工具 | yum install -y curl 或 apt-get install -y curl |
| 提示需要管理员权限 | Windows 安装脚本要求管理员 PowerShell | 右键「以管理员身份运行」 |
| 重启后数据全丢 | data 目录没挂载 | 按文件挂载清单挂上 /opt/gridperch/data |
| 告警时间差 8 小时 | 容器时区是 UTC | 设置 TZ=Asia/Shanghai 并挂载 /etc/localtime |
| Windows 7 / 8 / 8.1 / Server 2008 R2 / 2012 / 2012 R2 上采集端双击后闪退,没有窗口也没有日志 | Go 1.21 起编译的程序要求 Windows 10 / Server 2016 以上:随机数源依赖 bcryptprimitives.dll(Win7/2008R2 没有),且砍掉了 WSASocket / LoadLibraryEx 的旧回退。进程在 runtime 初始化阶段就退出,早于任何业务日志 | 改用兼容产物 gridperch-agent-windows-amd64-win7.exe(Go 1.20 构建),并在「版本发布」页勾选旧系统兼容版上传一次 —— 1.2.3 起安装脚本按系统版本自动选、自升级也只拿兼容版,不再需要 -remote-config off -update off(1.2.2 及更早仍需)。Win7 / 2008 R2 只有 PowerShell 2.0,用系统自带的 schtasks.exe 注册开机自启 |
| 旧系统一键安装报「尚未发布…旧系统兼容版」 | 平台只有正式版,没有兼容版记录(授权系统那条线只存一份产物) | 控制台「版本发布」→「采集端发布物(本地上传)」→ 填同一个版本号、勾选「旧系统兼容版」上传;正式版与兼容版并存,互不覆盖 |
| 「授权系统返回 HTTP 502(网关错误)」 | 请求已到达反向代理/CDN,但它没能从上游的授权中心拿到应答 —— 不是 -hub 地址写错 | 查四处:中心进程是否在跑、proxy_pass 端口是否一致、上游是 HTTPS 时是否加了 proxy_ssl_server_name on;、中心侧日志有没有收到请求。「在线升级」页会显示响应页面标题与 Server 头,据此判断卡在哪一层 |
| 「返回的是网页,说明地址落到了静态站点上」 | -hub 指到了站点首页而不是接口 | -hub 只写到域名的上一级(可带子路径),形如 https://域名;/api/v1/check 由程序自己拼,误填了也会被自动削掉 |
数据类
| 现象 | 原因 | 处理 |
|---|---|---|
| 主机显示离线但实际在线 | 采集端没在跑,或网络不通 | 检查采集端服务状态;确认能访问服务端 9999 |
| 指标全是 0 | 采集端刚重启,首轮采样缺基准 | 磁盘 IO 与网速第二轮上报起生效,属正常 |
| 温度、SMART 显示「未采集」 | 虚拟机/云主机没有对应硬件 | 属正常现象,不影响判定 |
| Windows 负载恒为 0 | Windows 无 loadavg 机制 | 属正常现象,页面已标注 |
| 监控项一直正常但没数据 | 目标配置写错 | 看监控项的最近一次消息,失败原因会写明 |
授权中心类
| 现象 | 原因 | 处理 |
|---|---|---|
同步返回 401 提示拉取令牌不正确 | 授权中心当前配置的令牌与平台发出的不一致 | 授权中心的令牌已改为编译内置,核对两侧内置值是否一致;或临时用 -hub-token 显式覆盖 |
同步返回 403 + Just a moment... | CDN 人机校验拦下程序客户端 | 在网关上为 /api/* 配置跳过规则;或改用不挂代理的接口子域;或 -hub "" 转离线 |
| 同步返回 HTML 而非 JSON | -hub 指向了网页 | 地址应为默认内置的授权中心地址(已内置程序,无需手动填写),不要带接口路径 |
| 一直显示「尚未签发授权」 | 授权中心还没给本机机器码签发 | 拿控制台显示的机器码去授权中心后台签发 |
| 授权导入后校验失败(提示签名校验失败) | 公钥抄错,或旧格式密钥不一致 | 新格式(GRIDPERCH2-)看启动日志的「授权验签公钥指纹」是否与授权中心一致,不一致就是公钥抄错了;旧格式(WGC-/OPSM1-/OPSM-)才需要两端 -license-secret 一致 |
| 日志反复刷「同步失败」 | 授权中心不可达 | 已自动退避(最长 30 分钟一次),无需处理 |
| 发现新版本但不自动升级 | -hub-auto-update 为 check/off | 改回 download,或手动点「拉取并升级」 |
| 提示「可升级到 X」但版本号永远不变,服务还反复重启 | 授权端把旧产物登记成了新版本号(典型:改了 -v 却没重新构建,--skip-build 复用了上一版 dist)——二进制自报版本没变,每轮同步都会「再升一次」 | 1.1.7 起平台与采集端在替换前都会先执行新二进制的 -version 自检,自报版本不高于当前就直接拒绝替换并给出报错;按报错重新构建、重新上传真正的该版本号即可(release.sh 也会在上传前比对 dist/VERSION 拦下这种误传) |
登录与控制台类
| 现象 | 原因 | 处理 |
|---|---|---|
| 登录后明确提示「用户名或密码错误」 | 账号或密码不正确(1.1.2 起给出明确原因,不再「点了没反应」) | 核对账号密码;注意控制台账号为首次启动时的 -user/-pass(环境变量 GRIDPERCH_ADMIN_USER/GRIDPERCH_ADMIN_PASS),仅首次启动生效 |
| 登录后明确提示「账号已停用」 | 该控制台用户被停用 | 用其他管理员在「系统设置 → 用户管理」重新启用 |
排查顺序
- 看服务端日志:
docker compose logs --tail=200或journalctl -u gridperch -n 200 - 看采集端日志:Linux
journalctl -u gridperch-agent -n 200, WindowsGet-ScheduledTaskInfo -TaskName gridperch-agent - 在目标主机自测连通性:
curl http://服务端IP:9999/ - 自测授权中心:
curl -o /dev/null -w '%{http_code}' "https://<你的授权中心地址>/api/v1/check?token=xxx",期望 200 - 看控制台「操作审计」,确认配置改动是否生效
- 看控制台「系统设置 → 机器人推送 / 邮件」,确认告警通道是否可用(可点测试)