CyberMonitor 是一款极简美观的服务器探针监控系统,采用 Go 驱动,支持多平台部署。
mkdir -p ./datadocker run -d \
-p 25012:25012 \
-v "$(pwd)/data:/data" \
--name cyber-monitor-server \
--restart=always \
ghcr.io/crazy0x70/cyber-monitor-server:latest查看初始化信息(管理后台路径、账号、密码、Token):
docker logs cyber-monitor-serverdocker run -d \
--name cyber-monitor-agent \
--restart=always \
--network host \
-e CM_SERVER_URL=http://<your_server_ip>:25012 \
-e CM_AGENT_TOKEN=<your_token> \
-v /:/host:ro \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /etc:/host/etc:ro \
ghcr.io/crazy0x70/cyber-monitor-agent:latest- 监控首页:
http://<server-host>:25012/ - 管理后台:
http://<server-host>:25012/<admin_path>
默认情况下 CyberMonitor 以前后端一体化方式运行(展示页与管理后台都由 Server 提供)。
如果你希望将展示页部署到 Cloudflare Pages 等静态站点,可使用“前后端分离模式”:
将以下目录/文件复制到你的静态站点根目录(例如 Cloudflare Pages 项目根目录):
internal/server/web/index.htmlinternal/server/web/assets/(目录)config.json(你需要新增,见下方示例)
提示:以上 web/ 目录内的文件仅用于复制到静态站点托管(例如 Cloudflare Pages)。
默认一体化模式下 Server 也会通过 embed 提供这些页面;如果启用“硬隔离”(CM_PUBLIC_LISTEN),展示接口端口将不再提供页面,仅提供 API/WS。
说明:分离模式下只部署展示页,不部署 admin.html,因此用户无法通过前端域名访问管理后台。
HTTP 示例:
{
"socket": "ws://127.0.0.1:56789/ws",
"apiURL": "http://127.0.0.1:56789"
}HTTPS 示例(推荐):
{
"socket": "wss://127.0.0.1:56789/ws",
"apiURL": "https://127.0.0.1:56789"
}也可以直接参考项目内示例文件:examples/config.example.json。
config.json 支持两种格式:
- 单组地址(推荐默认):
{
"socket": "wss://example.com:25013/ws",
"apiURL": "https://example.com:25013"
}- 多组地址(多 CDN 入口):
{
"cloudflare": {
"socket": "wss://example.com:25013/ws",
"apiURL": "https://example.com:25013"
},
"edgeone": {
"socket": "wss://example.com:25013/ws",
"apiURL": "https://example.com:25013"
}
}前端会并行连接所有合法配置并合并节点数据,不会只选其中一组。
字段说明:
socket:展示页使用的 WebSocket 地址(请包含/ws路径)apiURL:展示页拉取快照的 API Base URL(不需要包含/api/...路径)
- 如果静态站点使用
https://,浏览器会阻止连接ws://(混合内容),请使用wss://。 config.json不存在时会自动回退到同域模式(使用当前页面域名连接后端)。
右上角提供主题切换按钮,支持三种模式:
- 默认:自动(跟随系统外观)
- 手动:浅色 / 深色
点击按钮会在浅色与深色间切换;默认不保存时为自动模式。设置会保存在浏览器本地存储中,前台与管理后台共用同一套主题设置。
默认情况下管理后台与展示页复用同一端口(例如 :25012)。
如果你希望更进一步“硬隔离”,可以让管理后台与展示接口分别监听不同端口:
- 管理后台端口:Admin API、管理后台页面
- 展示接口端口:Agent 上报、Public API、Public WebSocket
启用方式(Server):
- CLI:
--public-listen 25013 - 环境变量:
CM_PUBLIC_LISTEN=25013
启用后行为变化:
- 展示接口端口只提供:
/api/v1/ingest、/api/v1/agent/config、/api/v1/public/snapshot、/api/v1/health、/ws(仅 Public,无 token) - 展示接口端口不提供页面:
/、/dashboard、/assets/*都不可访问 - 管理端口只提供:管理后台页面、Admin API、
/ws(仅 Admin,必须带 token)
这样可以把前端页面完全托管在 Cloudflare Pages / EdgeOne 等 CDN 静态服务上,后端仅暴露数据接口。
Docker 部署示例(端口映射):
- 管理端口:
25012:25012 - 展示接口端口:
25013:25013
前端静态站点的 config.json 指向展示接口端口,例如:
{
"socket": "wss://example.com:25013/ws",
"apiURL": "https://example.com:25013"
}当同一个静态站点经由多个 CDN 域名/入口时,也可写成多组配置(程序会并行连接并合并展示数据):
{
"cloudflare": {
"socket": "wss://example.com:25013/ws",
"apiURL": "https://example.com:25013"
},
"edgeone": {
"socket": "wss://example.com:25013/ws",
"apiURL": "https://example.com:25013"
}
}如果你在 Agent 容器内执行 ping 看到类似错误:
ping: permission denied (are you root?)
请在容器运行时为 Agent 增加 NET_RAW 能力(docker-compose 示例见 agent-example.yml)。
适用于使用 systemd 的发行版(需 root),脚本会自动创建 /opt/CyberMonitor/。
安装:
bash -c "$(curl -L https://raw.githubusercontent.com/crazy0x70/CyberMonitor/main/one-click.sh)" @ install卸载:
bash -c "$(curl -L https://raw.githubusercontent.com/crazy0x70/CyberMonitor/main/one-click.sh)" @ remove从 Releases 下载对应平台的 Server/Agent 二进制: https://github.com/crazy0x70/CyberMonitor/releases
./cyber-monitor-server -listen 25012 --data-dir ./data重置管理员密码:
sudo /opt/CyberMonitor/cyber-monitor-server --reset-password./cyber-monitor-agent --server-url http://<your_server_ip>:25012 --agent-token <your_token>curl -fsSL https://raw.githubusercontent.com/crazy0x70/CyberMonitor/main/agent.sh -o /tmp/agent.sh && bash /tmp/agent.sh --server-url http://<your_server_ip>:25012 --agent-token <your_token>powershell -ExecutionPolicy Bypass -Command 'iwr -UseBasicParsing https://raw.githubusercontent.com/crazy0x70/CyberMonitor/main/agent.ps1 -OutFile "$env:TEMP\\agent.ps1"; & "$env:TEMP\\agent.ps1" -ServerUrl "http://<your_server_ip>:25012" -AgentToken "<your_token>"'powershell -ExecutionPolicy Bypass -Command 'iwr -UseBasicParsing https://raw.githubusercontent.com/crazy0x70/CyberMonitor/main/agent-uninstall.ps1 -OutFile "$env:TEMP\\agent-uninstall.ps1"; & "$env:TEMP\\agent-uninstall.ps1"'CM_LISTEN:监听地址,默认25012CM_PUBLIC_LISTEN:展示页监听地址(可选,留空则与 CM_LISTEN 一致)CM_DATA_DIR:数据目录,默认/opt/CyberMonitor/data
CM_SERVER_URL:Server 地址CM_AGENT_TOKEN:与 Server 一致CM_NET_IFACE:指定采集网卡(逗号分隔)CM_HOST_ROOT:宿主机挂载根目录(容器部署时使用)CM_INTERVAL:采样间隔
- 服务器管理支持设置显示昵称、地域、硬盘/网速、分组标签、到期与续费信息
- 离线告警在服务器管理内逐台配置,保存后下发到 Agent
- 刷新按钮会提示刷新成功,便于确认加载状态
- 「API提供商」用于配置 AI 运维能力,支持 OpenAI / Gemini / Volcengine 以及多个 OpenAI 兼容服务商
- API 提供商卡片点击展开设置,可测试连接并获取可用模型列表
- 在「API提供商」配置 API Key、Base URL 与模型,可测试连接并获取可用模型
/ai会基于当前服务器状态与分组标签生成运维回答- 通知告警中可指定 /ai 使用的提供商与 Prompt
管理后台「通知告警」支持飞书 Webhook 与 Telegram Bot。
- 需要同时填写
Bot Token与Telegram 用户 ID(多个用户用逗号分隔) - 配置完成后可通过 Telegram 获取告警与服务器信息
- 离线告警开关请在「服务器管理」为每台服务器单独设置
/cmall:查看所有服务器统计/server:查看服务器列表(在线/离线分组)/status <服务器ID>:查看指定服务器状态/alarmson <服务器ID>:开启该服务器告警/alarmsoff <服务器ID>:关闭该服务器告警/ai <问题>:AI 运维查询(例如:/ai 哪台服务器下载量最多)