昨天下午浏览博客,突然发现博客无法访问,服务器上部署的的其他网站也全挂了。顿时大感不妙,赶忙打开远程链接工具看看到底怎么回事。然后发现,SSH 也连不上了,换成平时使用最流畅的电信线路还是不行。脑子里突然冒出一个想法:难不成商家跑路这事真被我遇上了?不过好在所有网站的数据我在本地都有备份,就算跑路数据也不会丢,就是重新部署有些麻烦。当然这只是最坏的结果。
后来打开服务器厂商官网,进入管理后台,一切都很顺利,后台显示服务器状态正常,这说明最坏的结果没有发生。我重启了服务器后再次尝试连接 SSH 还是连接不上,我又想是不是 IP 被墙了,我在本地 ping 了很多次都都 ping 不通,然后又换 ping.pe 试了几次,发现海外是没问题的,大陆的大部分地区丢包率都是接近 100%,这才反应过来可能是线路炸了,开启代理后 SSH 也能连上了。大概过了几个小时后,线路也都逐渐恢复了,虚惊一场~
现在为了能够更方便地查看服务器和网站状态,我想还是部署一个探针比较好,最后选择了相对轻量化的 ServerStatus ,简单记录一下(Docker)部署过程。
部署服务端
ServerStatus 分为服务端和客户端,也就是监控中心和被监控的服务器(可以部署在同一台机器上),首先部署服务端。
下载配置文件
sudo mkdir -p /srv/docker_data/server_status/server_status_monthtraffic && sudo wget --no-check-certificate -qO /srv/docker_data/server_status/server_status_config.json https://raw.githubusercontent.com/cppla/ServerStatus/master/server/config.json
自定义 json 文件
根据自己的需要进行修改,我删除了官方提供的 json 文件内自己不需要的内容
// 编辑完成后建议删除注释,包括这一行,以免产生错误
{
"servers": [
{
"disabled": false, // 是否隐藏服务器
"username": "s01", // 客户端连接时所需的用户名
"name": "node1", // 页面显示的节点名称
"type": "kvm", // 服务器虚拟化类型
"host": "host1",
"location": "🇺🇸", // 服务器位置
"password": "USER_DEFAULT_PASSWORD", // 客户端连接时所需的密码
"monthstart": 1 //流量刷新日期
},
{
"disabled": true,
"username": "s02",
"name": "node2",
"type": "vmware",
"host": "host2",
"location": "🇯🇵",
"password": "USER_DEFAULT_PASSWORD",
"monthstart": 1
}
],
"monitors": [
{
"name": "Google", // 要监控的站点名称
"host": "https://www.google.com/", // 站点地址
"interval": 600, // 请求间隔
"type": "https" // 协议类型
},
{
"name": "example",
"host": "1.1.1.1",
"interval": 600,
"type": "tcp"
}
]
}
部署 Docker 容器
cd /srv/docker_data/serverstatus/
touch docker-compose.yaml
在 docker-compose.yaml 文件内输入以下内容:
version: '3.9'
services:
serverstatus:
image: 'cppla/serverstatus:latest'
ports:
- '35601:35601'
- '7380:80'
volumes:
- '/srv/docker_data/server_status/server_status_monthtraffic:/usr/share/nginx/html/json'
- '/srv/docker_data/server_status/server_status_config.json:/ServerStatus/server/config.json'
container_name: serverstatus
restart: always
部署容器
sudo docker compose up -d
至此服务端就部署完成了,浏览器输入服务器 IP:7380 就可以查看监控页面了,接下来部署客户端。
部署客户端
下载客户端脚本
sudo wget --no-check-certificate -qO client-linux.py 'https://raw.githubusercontent.com/cppla/ServerStatus/master/clients/client-linux.py'
修改脚本内容
# SERVER 后的内容改为服务端的 IP
# USER 后的内容改为服务端 username 对应的名称
# PASSWORD 后的内容改为服务端 password 对应的名称,没有设置则不用改
vim client-linux.py
输入 :wq
保存后接下来就可以运行脚本了
nohup python3 client-linux.py >/dev/null 2>&1 &
至此客户端也已部署完成,接下来可以绑定域名进行反向代理。
卸载 ServerStatus
最后说一下卸载方法
卸载客户端
# 删除容器
sudo docker ps # 查看容器 ID
sudo docker stop <容器 ID>
sudo docker rm <容器 ID>
# 删除镜像
sudo docker images # 查看容器 ID
sudo docker rmi <镜像 ID>
# 最后进入"/srv/docker_data/"目录删除"serverstatus"目录
卸载服务端
# 查看 client-linux.py 对应进程 PID
ps -ef | grep python3
# 结束 python3 对应的进程
kill -9 PID
# 最后删除下载的名为“client-linux.py”的 Python 脚本
ServerStatus-Rust
ServerStatus 还有一个 rust 重写版,比原版更轻量,项目地址 ServerStatus-Rust
这里顺便附上官方一键安装脚本
# 创建目录
mkdir -p /opt/ServerStatus/server/ && cd /opt/ServerStatus/server/
mkdir -p /opt/ServerStatus/client/ && cd /opt/ServerStatus/client/
# 下载脚本
wget --no-check-certificate -qO status.sh 'https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/scripts/status.sh'
# 安装 服务端
bash status.sh -i -s
# 安装 客户端
bash status.sh -i -c
# or
bash status.sh -i -c protocol://username:password@master:port
# eg:
bash status.sh -i -c grpc://h1:[email protected]:9394
bash status.sh -i -c http://h1:[email protected]:8080
# 更多用法:
❯ bash status.sh
help:
-i,--install 安装 Status
-i -s 安装 Server
-i -c 安装 Client
-i -c conf 自动安装 Client
-up,--upgrade 升级 Status
-up -s 升级 Server
-up -c 升级 Client
-up -a 升级 Server and Client
-un,--uninstall 卸载 Status
-un -s 卸载 Server
-un -c 卸载 Client
-un -a 卸载 Server and Client
-rc,--reconfig 更改 Status 配置
-rc 更改 Client 配置
-rc conf 自动更改 Client配置
-s,--server 管理 Status 运行状态
-s {status|start|stop|restart}
-c,--client 管理 Client 运行状态
-c {status|start|stop|restart}
-b,--bakup 备份 Status
-b -s 备份 Server
-b -c 备份 Client
-b -a 备份 Server and Client
-rs,--restore 恢复 Status
-rs -s 恢复 Server
-rs -c 恢复 Client
-rs -a 恢复 Server and Client
若无法访问 Github:
CN=true bash status.sh args