Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

dumpmemory/ServerStatus

Open more actions menu
 
 

Repository files navigation

ServerStatus 中文版

ServerStatus 是一个轻量的服务器探针和云监控面板,支持多节点在线状态、资源占用、三网延迟、服务监测、SSL 证书检查、Watchdog 告警和 Web 配置管理。

在线演示:https://tz.cloudcpp.com

Python Support C++ Compiler License Version

Latest Host Version

Watchdog 的 interval 是最小通知间隔,用于避免频繁报警,并不是探测间隔。rule 使用 Exprtk 表达式,当前窄字符解析对中文等 Unicode 字符不友好,规则中建议使用英文、数字和字段名。

一、服务端

# Docker Compose,本地构建加:--build
ADMIN_TOKEN='your-strong-token' docker compose -f docker-compose-server.yml up -d
# Docker Run
wget --no-check-certificate -qO ~/serverstatus-config.json \
  https://raw.githubusercontent.com/cppla/ServerStatus/master/server/config.json
mkdir -p ~/serverstatus-monthtraffic

docker run -d --restart=always --name=serverstatus-server \
  -e ADMIN_TOKEN='your-strong-token' \
  -v ~/serverstatus-config.json:/ServerStatus/server/config.json \
  -v ~/serverstatus-monthtraffic:/usr/share/nginx/html/json \
  -p 8080:80 -p 35601:35601 \
  cppla/serverstatus:server

启动后访问:

二、客户端

# Docker Compose,本地构建加:--build
SERVER=127.0.0.1 USER=s01 docker compose -f docker-compose-client.yml up -d --force-recreate
# Docker Run
docker run -d --restart=always --name=serverstatus-client \
  --network=host --pid=host \
  -e SERVER=127.0.0.1 \
  -e USER=s01 \
  cppla/serverstatus:client
# Shell Run
wget --no-check-certificate -qO client-linux.py 'https://raw.githubusercontent.com/cppla/ServerStatus/master/clients/client-linux.py' && (nohup python3 client-linux.py SERVER=127.0.0.1 USER=s01  >/dev/null 2>&1 &)

客户端环境变量和注意事项: USER 是常见的宿主机环境变量名。如果没有显式传递,Compose 可能会把系统里的 $USER 解析成本机用户名。推荐优先级:1. 运行命令显式传递 USER=...,2. 用户修改 docker-compose-client.yml 里的 USER 默认值

变量 默认值 说明
SERVER 127.0.0.1 服务端地址
USER s01 客户端用户名,必须匹配服务端配置
PORT 35601 服务端 sergate 端口
PASSWORD USER_DEFAULT_PASSWORD 客户端密码,必须匹配服务端配置
INTERVAL 1 上报间隔
PROBEPORT 80 探测端口
PROBE_PROTOCOL_PREFER ipv4 探测协议偏好
PING_PACKET_HISTORY_LEN 100 Ping 历史长度
CU cu.tz.cloudcpp.com 联通探测地址
CT ct.tz.cloudcpp.com 电信探测地址
CM cm.tz.cloudcpp.com 移动探测地址
CLIENT psutil 客户端实现,可选 psutillinux

HTTP 管理 API

Docker 服务端镜像已内置 HTTP API,并通过 nginx 暴露在 Web 端口下。源码手动运行时需要单独启动 server/manage_api.py;如果要让 WebUI 的「配置」页可用,还需要把 /api/ 反代到 manage_api.py。认证方式:

Authorization: Bearer your-strong-token

无需认证的接口:

curl http://127.0.0.1:8080/api/health
curl http://127.0.0.1:8080/api/schema

读取完整配置:

curl -H 'Authorization: Bearer your-strong-token' \
  http://127.0.0.1:8080/api/config

节点 CRUD:

curl -X POST http://127.0.0.1:8080/api/servers \
  -H 'Authorization: Bearer your-strong-token' \
  -H 'Content-Type: application/json' \
  -d '{"username":"s05","name":"node5","type":"kvm","host":"host5","location":"SG","password":"USER_DEFAULT_PASSWORD","monthstart":1}'

curl -X PUT http://127.0.0.1:8080/api/servers/s05 \
  -H 'Authorization: Bearer your-strong-token' \
  -H 'Content-Type: application/json' \
  -d '{"username":"s05","name":"node5-new","type":"kvm","host":"host5","location":"SG","password":"USER_DEFAULT_PASSWORD","monthstart":1}'

curl -X DELETE -H 'Authorization: Bearer your-strong-token' \
  http://127.0.0.1:8080/api/servers/s05

monitorssslcertswatchdog 也支持细粒度 CRUD。更新和删除可以用数字 index;如果 name 唯一,也可以用 URL 编码后的 name

curl -X POST http://127.0.0.1:8080/api/monitors \
  -H 'Authorization: Bearer your-strong-token' \
  -H 'Content-Type: application/json' \
  -d '{"name":"demo","host":"https://example.com","type":"https","interval":600}'

curl -X PUT http://127.0.0.1:8080/api/sslcerts/0 \
  -H 'Authorization: Bearer your-strong-token' \
  -H 'Content-Type: application/json' \
  -d '{"name":"example","domain":"https://example.com","port":443,"interval":7200,"callback":"https://yourSMSurl"}'

curl -X DELETE -H 'Authorization: Bearer your-strong-token' \
  http://127.0.0.1:8080/api/watchdog/0

重载配置或重启 sergate

curl -X POST -H 'Authorization: Bearer your-strong-token' \
  http://127.0.0.1:8080/api/reload

curl -X POST -H 'Authorization: Bearer your-strong-token' \
  http://127.0.0.1:8080/api/restart

完整端点以 /api/schema 输出为准。

配置文件

配置文件默认路径:

  • Docker 服务端:/ServerStatus/server/config.json
  • 源码运行:server/config.json,或通过 --config 指定

基础示例:

{
  "servers": [
    {
      "username": "s01",
      "name": "node1",
      "type": "kvm",
      "host": "host1",
      "location": "CN",
      "password": "USER_DEFAULT_PASSWORD",
      "monthstart": 1
    }
  ],
  "monitors": [
    {
      "name": "example",
      "host": "https://example.com",
      "interval": 600,
      "type": "https"
    }
  ],
  "sslcerts": [
    {
      "name": "example",
      "domain": "https://example.com",
      "port": 443,
      "interval": 7200,
      "callback": "https://yourSMSurl"
    }
  ],
  "watchdog": [
    {
      "name": "offline warning",
      "rule": "online4=0&online6=0",
      "interval": 600,
      "callback": "https://yourSMSurl"
    },
    {
      "name": "cpu high warning",
      "rule": "cpu>90&load_1>5&username!='s01'",
      "interval": 600,
      "callback": "https://yourSMSurl"
    }
  ]
}

常见 Watchdog 回调:

Telegram: https://api.telegram.org/bot你的密钥/sendMessage?parse_mode=HTML&disable_web_page_preview=true&chat_id=你的标识&text=
Server酱: https://sctapi.ftqq.com/你的密钥.send?title=ServerStatus&desp=
PushDeer: https://api2.pushdeer.com/message/push?pushkey=你的密钥&text=
HttpBasicAuth: https://用户名:密码@你的域名/api/push?message=

源码编译和运行

服务端依赖:

# Debian/Ubuntu
apt-get -y install gcc g++ make libcurl4-openssl-dev python3 nginx openssl

# CentOS/RedHat
yum -y install gcc gcc-c++ make libcurl-devel python3 nginx openssl

编译并运行 sergate

cd ServerStatus/server
make
mkdir -p ../web/json
./sergate --config=config.json --web-dir=../web &
echo $! > /tmp/serverstatus-sergate.pid

如果只需要 HTTP API,可以再启动 manage_api.py

cd ServerStatus/server
ADMIN_TOKEN='your-strong-token' \
CONFIG_PATH="$PWD/config.json" \
SERGATE_PID_FILE=/tmp/serverstatus-sergate.pid \
ADMIN_API_BIND=127.0.0.1 \
ADMIN_API_PORT=35602 \
python3 manage_api.py

源码方式直连 API:

curl http://127.0.0.1:35602/api/health
curl -H 'Authorization: Bearer your-strong-token' \
  http://127.0.0.1:35602/api/config

如果要通过 WebUI 使用「配置」页,需要 nginx 同时提供静态文件并反代 /api/。示例配置:

server {
    listen 8080;
    server_name _;

    root /path/to/ServerStatus/web;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location /json/ {
        add_header Cache-Control "no-store";
        try_files $uri =404;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:35602;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 30s;
    }
}

启动失败时优先检查端口占用:35601sergate 客户端上报端口,35602 是源码方式的管理 API 端口,8080 是上面示例的 Web 端口。源码手动运行没有 Docker 入口脚本守护;调用 /api/restart 会向 sergate 发送 SIGTERM,需要你用 systemd、supervisor 或 shell 循环自行拉起。

客户端源码运行

client-linux.py

wget --no-check-certificate -qO client-linux.py \
  https://raw.githubusercontent.com/cppla/ServerStatus/master/clients/client-linux.py

nohup python3 client-linux.py SERVER=127.0.0.1 USER=s01 PASSWORD=USER_DEFAULT_PASSWORD \
  >/dev/null 2>&1 &

client-psutil.py

# Debian/Ubuntu
apt -y install python3-psutil

# CentOS/RedHat
yum -y install python3-pip gcc python3-devel
pip3 install psutil

python3 clients/client-psutil.py SERVER=127.0.0.1 USER=s01

后台运行与开机启动:

nohup python3 client-linux.py SERVER=127.0.0.1 USER=s01 &

# crontab -e
@reboot /usr/bin/python3 /path/to/client-linux.py SERVER=127.0.0.1 USER=s01

本地构建镜像

docker build -f Dockerfile.server -t cppla/serverstatus:server .
docker build -f Dockerfile.client -t cppla/serverstatus:client .

Make Better

About

云探针、多服务器探针、云监控、多服务器云监控,演示: https://tz.cloudcpp.com/

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages

  • C++ 84.3%
  • C 5.7%
  • Python 3.4%
  • JavaScript 2.2%
  • Shell 2.1%
  • CSS 1.8%
  • Other 0.5%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.