一、项目速览

入门 · 1 分钟版

如果你手上有三五台 VPS 或者云服务器,想用一个页面就能看清每台机器的 CPU、内存、流量和在线状态——ServerStatus-Hotaru 就是为此而生的轻量级探针系统。

它本质上是一个 C 语言编写的服务端 + Python/Go 客户端 的组合。服务端负责收集和展示数据,客户端部署在每台被监控的机器上,定期上报状态。整个项目只有 2 个核心文件,部署完就能在浏览器里看到类似「云监控面板」的界面。

一句话判断:如果你需要「免费、极简、不依赖第三方平台」的多服务器监控,而且不想折腾 Prometheus + Grafana 那一套重型方案,这个项目值得花 10 分钟试一下。

二、核心功能与架构

进阶 · 推荐细读

它是什么:ServerStatus-Hotaru 是经典项目 ServerStatus-Toyo 的改良版,用 C 重写了服务端,前端换成了 Vue 3.0 + SemanticUI。它只做一件事——实时展示多台服务器的基本运行状态。

它解决什么问题:当你管理多台服务器时,最频繁的需求是「看一眼那台机器还活着吗」「流量有没有跑超」。传统方案要么太笨重(Zabbix),要么需要第三方服务(UptimeRobot)。这个项目给你一个自建的面板,所有数据存在本地,不经过任何外部服务。

谁最该用:个人站长、学生党、中小团队——只要你有 2-20 台服务器,而且只关心 CPU/内存/磁盘/流量/在线状态这 5 个指标。

架构非常简单:

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│ 服务器 A     │     │ 服务器 B     │     │ 服务器 C     │
│ (客户端)     │     │ (客户端)     │     │ (客户端)     │
│ 上报状态 ────┼──►  │ 上报状态 ────┼──►  │ 上报状态 ────┼──►
└──────────────┘     └──────────────┘     └──────────────┘
                                          │
                                          ▼
                                    ┌──────────────┐
                                    │ 服务端 (C)    │
                                    │ 端口 35601    │
                                    │ 前端页面      │
                                    └──────────────┘

服务端:用 C 写的二进制文件 sergate,监听一个端口(默认 35601),接收客户端上报的 JSON 数据,然后提供 HTTP 接口给前端渲染。它不做数据持久化——重启就丢历史数据,只保留当前状态。

客户端:有两个版本。默认版是纯 Python 脚本,依赖 psutil 读取系统信息;Go 客户端是为没有 Python 环境的机器准备的(比如 Alpine Linux 容器)。客户端默认按重启清零计算流量,也可以选装 vnStat 实现按月累计。

作者视角补充:很多人第一次用会困惑「为什么历史数据没了」。因为设计哲学就是「轻量级」——服务端不写数据库,不存日志,所有数据都在内存里。如果你需要历史趋势图,这个项目不适合你,请右转 NodeStatus 或 Prometheus。

三、动手实践

入门

下面我们从零开始部署一套完整的监控系统。假设你有一台「服务端机器」(用来展示面板)和至少一台「客户端机器」(被监控的机器)。

环境准备

服务端要求:CentOS 7、Debian 8、Ubuntu 15.10 及以上,需要 wgetbash

客户端要求:Python 2.7+(或 Go 环境),需要 pip

一键安装服务端

在服务端机器上执行:

wget https://raw.githubusercontent.com/cokemine/ServerStatus-Hotaru/master/status.sh
bash status.sh s

脚本会做三件事:编译 C 服务端、下载前端页面、启动服务。如果在中国大陆服务器上跑,建议换用 Coding.net 镜像:

wget https://cokemine.coding.net/p/hotarunet/d/ServerStatus-Hotaru/git/raw/master/status.sh
bash status.sh s

安装过程中会提示你输入服务端 IP 和端口,默认端口 35601。安装完后,浏览器访问 http://你的IP:35601 就能看到面板了——不过现在还没有任何客户端数据。

安装客户端

在被监控的机器上执行:

wget https://raw.githubusercontent.com/cokemine/ServerStatus-Hotaru/master/status.sh
bash status.sh c

脚本会问三个问题:
- 服务端 IP:刚才那台机器的 IP
- 服务端端口:默认 35601
- 客户端用户名:随便起,比如 server1
- 客户端密码:随便设,但要和服务端配置一致

常见踩坑 1:客户端提示 psutil 安装失败。这是最常见的问题——某些最小化安装的 Linux 没有 python3-pip。手动补一下:
bash apt install python3-pip -y # Debian/Ubuntu yum install python3-pip -y # CentOS pip3 install psutil

常见踩坑 2:面板上显示「离线」但客户端进程明明在跑。原因是防火墙没放开 35601 端口。检查一下:
```bash

iptables 临时放行

iptables -I INPUT -p tcp --dport 35601 -j ACCEPT

或者用 firewalld

firewall-cmd --add-port=35601/tcp --permanent && firewall-cmd --reload
```

验证效果

在服务端机器上查看客户端是否连接成功:

curl http://127.0.0.1:35601/json/stats.json

如果返回类似下面的 JSON,说明客户端已经上报数据了:

{
  "servers": [
    {
      "name": "server1",
      "host": "你的客户端IP",
      "uptime": "3 days, 2 hours",
      "cpu": 12.5,
      "memory_total": 1024,
      "memory_used": 512,
      "hdd_total": 20480,
      "hdd_used": 10240,
      "network_rx": 123456789,
      "network_tx": 98765432
    }
  ]
}

刷新浏览器页面,你应该能看到服务器卡片了。

四、进阶玩法

深入 · 老手可选

自定义流量计算方式

默认情况下,客户端重启后流量归零。如果你想按月累计流量,需要安装 vnStat。手动安装脚本会自动处理,但如果你是一键安装的,可以这样启用:

# 在客户端机器上安装 vnStat
apt install vnstat -y
# 然后修改客户端配置,添加一行
echo "USE_VNSTAT=true" >> /usr/local/ServerStatus/client/config.conf
# 重启客户端
systemctl restart status-client

手动配置多客户端

如果你有很多台机器要监控,一键安装脚本每次都要交互输入很麻烦。可以直接编辑服务端的配置文件:

vim /usr/local/ServerStatus/server/config.json

格式如下:

{
  "servers": [
    {
      "username": "server1",
      "password": "pass123",
      "host": "192.168.1.10",
      "name": "主站服务器"
    },
    {
      "username": "server2",
      "password": "pass456",
      "host": "192.168.1.11",
      "name": "API 服务器"
    }
  ]
}

然后每台客户端机器上,手动修改客户端的配置文件 /usr/local/ServerStatus/client/config.conf,内容就是服务端 IP、端口、用户名和密码。

作者视角补充:这个配置文件没有热重载机制。改完必须重启服务端进程。我建议用 pkill sergate 杀掉旧进程,再用 nohup 重新启动,而不是用 kill -9——后者可能导致端口未释放。

自定义前端

如果你觉得默认的 Vue 主题太素,可以自己改。前端源码在 hotaru_theme 仓库。修改后重新打包:

npm install
npm run build

把生成的 dist 目录覆盖到服务端的 /usr/local/ServerStatus/web 即可。

五、判断与建议

进阶 · 推荐细读

应该选它的情况
- 你只需要实时状态,不需要历史图表
- 服务器数量在 20 台以内
- 你希望部署过程不超过 5 分钟
- 你不想为监控额外花钱买第三方服务

不该选它的情况
- 你需要监控 MySQL、Nginx 等应用层指标(它只监控系统级)
- 你需要告警通知(项目作者已明确不添加此功能,推荐用 NodeStatus)
- 你需要历史数据回溯分析(服务端不存日志)
- 你的服务器超过 50 台(C 语言服务端性能尚可,但前端没有分组管理功能)

结论:ServerStatus-Hotaru 是一个「刚刚好」的工具——刚好够用,刚好轻量,刚好免费。它不会成长为全能监控平台,但作为个人站长手里那十几台机器的「健康仪表盘」,它做得比任何大而全的方案都更省心。

如果你想在它的基础上加告警、加历史数据、加 Docker 支持,作者已经为你指明了方向:NodeStatus。但如果你只是想「看一眼机器还活着没」——就这个了,别犹豫。

项目信息

项目
仓库 cokemine/ServerStatus-Hotaru
语言 C
Star 2,467
Fork 623
主页

参考链接