本文重在 ServerStatus 的安装流程,介绍和更多使用请到:探针 – 技焉洲 (vfly2.com)
适用系统:Debian 系发行版,包括 Ubuntu 和 Armbian,其他发行版按流程稍改命令一般也可。
Github: zdz/ServerStatus-Rust: ✨ Rust 版 ServerStatus 探针、威力加强版
前置准备:
- 一个域名解析到作为服务端机子的ip上,比如 serverstatus.ahfei.blog 。既可用于web端界面访问,也可用于客户端联系服务端。
- VPS 的网络可以访问GitHub
一键安装脚本
如果你是第一次使用,建议先跳过此节,往下看了解安装步骤。
这个脚本会安装客户端并用 systemd 守护进程,开机自启;另外,服务端可选安装。
- 对于被监控的机子,只需要运行一次这个脚本即成功安装客户端,无须其他操作。
- 对于服务端机子,还需要编辑服务端配置文件并重启。
脚本仓库: bash-script/install-rust_serverstatus.sh at main · AhFeil/bash-script (github.com)
下载脚本
curl -LO https://raw.githubusercontent.com/AhFeil/bash-script/main/install-rust_serverstatus.sh
执行脚本–(既安装客户端、又安装服务端)使用示例
sudo bash install-rust_serverstatus.sh "http://serverstatus.vfly2.com:8080/report" "/home/vfly2/myserve/serverstatus" vfly2 "vfly2rn" "123456" yes
参数:(根据实际情况自行修改)
- 服务端地址: "http://serverstatus.vfly2.com:8080/report"
- 安装目录:"/home/vfly2/myserve/serverstatus"
- 运行软件的用户,如 root 或 1000
- ssr_uid:"vfly2rn" , rust_serverstatus 配置文件里的用户名
- ssr 密码: "123456" ,rust_serverstatus 配置文件里用户名对应的密码
- 是否安装服务端,填任意字符即安装服务端
若之前执行过脚本,再次运行就会覆盖原来的,也就是实现了更新。
不过需要重启客户端或服务端systemctl restart stat_client
若服务端部署完毕,打开 http://<你的IP>:8080/ ,访问地图打开 http://<你的IP>:8080/map 。
脚本显然对客户端安装的加速最明显,只要部署好了服务端,在机器安装客户端时,要需要修改往往只有 ssr_uid:
sudo bash install-rust_serverstatus.sh "http://serverstatus.vfly2.com:8080/report" "/home/vfly2/myserve/serverstatus" vfly2 "vfly2bwg" "123456"
安装 ServerStatus-Rust
确保安装了一些软件工具
apt install -y curl unzip
获取机器架构,查找最新版本
# get_architecture
arch=$(uname -m)
# 设置 ARCHITECTURE 变量
if [[ $arch == "aarch64" ]]; then
ARCHITECTURE="aarch64"
elif [[ $arch == "x86_64" ]]; then
ARCHITECTURE="x86_64"
else
ARCHITECTURE="unknown"
fi
github_project="zdz/ServerStatus-Rust"
tag=$(curl -m 10 -sL "https://api.github.com/repos/$github_project/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
echo ${tag}
创建安装目录(比如用家目录下的 myserve/serverstatus)
mkdir -p ~/myserve/serverstatus && cd ~/myserve/serverstatus
安装服务端
下载和解压服务端
curl -L -O https://github.com/zdz/ServerStatus-Rust/releases/download/${tag}/server-${ARCHITECTURE}-unknown-linux-musl.zip && \
unzip -o "server-${ARCHITECTURE}-unknown-linux-musl.zip" && \
rm "server-${ARCHITECTURE}-unknown-linux-musl.zip"
安装客户端
下载和解压客户端
curl -L -O https://github.com/zdz/ServerStatus-Rust/releases/download/${tag}/client-${ARCHITECTURE}-unknown-linux-musl.zip && \
unzip -o "client-${ARCHITECTURE}-unknown-linux-musl.zip" && \
rm "client-${ARCHITECTURE}-unknown-linux-musl.zip"
作为服务端的机器,除了要安装 ServerStatus-Rust 的服务端,还需要安装客户端。
serverstatus 结构,客户端主动上报服务端:
ServerStatus 服务端
先开启防火墙
myserve="serverstatus"
sudo ufw allow 8080,9394/tcp comment $myserve && sudo ufw reload
服务端配置
进入工作目录,编辑服务端的配置文件
cd ~/myserve/serverstatus && sudo vim config.toml
配置文件示例
# 默认安装的路径
workspace = "/home/vfly2/myserve/serverstatus"
# 侦听地址, ipv6 使用 [::]:9394
grpc_addr = "0.0.0.0:9394"
http_addr = "0.0.0.0:8080"
# 默认30s无上报判定下线
offline_threshold = 30
# 管理员账号,不设置的话,默认随机生成,用于查看 /detail, /map
admin_user = "admin_user"
admin_pass = "112233"
hosts = [
{name = "vfly2bwg", password = "123456", alias = "Bwg", location = "US", type = "KVM", labels = "os=debian;ndd=2024/1/15;spec=2C/2G/40G;"},
{name = "vfly2ht", password = "123456", alias = "HT", location = "TR", type = "VMware", labels = "os=debian;ndd=2024/3/28;spec=1C/1G/20G;"},
{name = "vfly2as", password = "123456", alias = "alongserver", location = "AS", type = "arm", labels = "os=arch;ndd=2029/11/25;spec=4C/2G/14G;", notify = false},
]
# 告警间隔默认为30s
notify_interval = 30
[tgbot]
# 开关 true 打开
enabled = false
bot_token = "<tg bot token>"
chat_id = "<chat id>"
title = "❗<b>Server Status</b>"
online_tpl = "{{config.title}} \n😆 {{host.location}} {{host.alias}} 主机恢复上线啦"
offline_tpl = "{{config.title}} \n😱 {{host.location}} {{host.alias}} 主机已经掉线啦"
必须要自定义的的变量: workspace、admin_user 和 admin_pass、hosts,其他可以不管,不影响基本使用。
hosts = [
{name = "vfly2bwg", password = "123456", alias = "Bwg", location = "US", type = "KVM", labels = "os=debian;ndd=2024/1/15;spec=2C/2G/40G;"},
{name = "vfly2ht", password = "123456", alias = "HT", location = "TR", type = "VMware", labels = "os=debian;ndd=2024/3/28;spec=1C/1G/20G;"},
{name = "vfly2as", password = "123456", alias = "alongserver", location = "AS", type = "arm", labels = "os=arch;ndd=2029/11/25;spec=4C/2G/14G;", notify = false},
]
说明:
- name 主机唯一标识,不可重复。待会客户端那里要用。
- password 对应的密码,客户端那里用的
- alias 展示名
- location 国家缩写即可,如 cn us 等,所有国家见 https://github.com/zdz/ServerStatus-Rust/tree/master/web/static/flags/4×3
- type 机器类型
- 自定义标签 labels = "os=debian;ndd=2022/11/25;spec=2C/4G/60G;"
- os 可选,不填则使用上报数据(可用 centos debian ubuntu alpine pi arch windows linux)
- ndd(next due date) 下次续费时间
- spec 为主机规格
- notify = false 禁止该机器的告警,一般针对网络差,频繁上下线的机器
- monthstart = 1 没启用 vnstat 时,表示月流量从每月哪天开始统计
- disabled = true 单机禁用
怎么获取 bot token: Telegram-Bot 的注册和使用 Python 编写 机器人 – 技焉洲 (vfly2.com)
测试配置文件是否有效
./stat_server -c config.toml -t
根据配置发送测试消息,验证通知是否生效
./stat_server -c config.toml --notify-test
服务端运行
./stat_server -c config.toml
这时,如果没有出错,访问 IP:8080 即可看到 Web 网页。
不过,很明显,现在如果断开 SSH 连接,服务端也就不运行了,使用 systemd 守护进程解决这个问题,具体内容请往下看。
若想查看地图,访问 IP:8080/map
查看帮助
./stat_server -h
更多内容:服务端说明 – Rust 版 ServerStatus 云探针 (ssr.rs)
ServerStatus 客户端
运行客户端
./stat_client -a "http://serverstatus.vfly2.com:8080/report" -u vfly2bwg -p 123456
# 也可以用 grpc 协议,选一种即可
./stat_client -a "grpc://serverstatus.vfly2.com:9394" -u vfly2bwg -p 123456
- -a:服务端的网址
- -u:这台机器的在服务端配置文件 hosts 里设置的用户名
- -p:~设置的密码
如果正常启动,在 Web 网页就能看到这台机器了。
依然是,如果断开 SSH 连接,客户端也就不运行了,使用 systemd 守护进程解决这个问题,具体内容请往下看。
查看帮助
./stat_client -h
更多选项可以查看文档: 客户端说明 – Rust 版 ServerStatus 云探针 (ssr.rs)
Systemd 守护进程
客户端
sudo vim /etc/systemd/system/stat_client.service
注意修改 User、Group、WorkingDirectory、ExecStart
cat > /etc/systemd/system/stat_client.service <<EOF
# /etc/systemd/system/stat_client.service
[Unit]
Description=ServerStatus-Rust Client
After=network.target
[Service]
User=vfly2
Group=vfly2
Environment="RUST_BACKTRACE=1"
WorkingDirectory=/home/vfly2/myserve/serverstatus
ExecStart=/home/vfly2/myserve/serverstatus/stat_client -a "http://serverstatus.vfly2.com:8080/report" -u vfly2bwg -p 123456
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
加载配置
sudo systemctl daemon-reload
开机自启,立即启动
sudo systemctl enable --now stat_client
sudo systemctl stop stat_client
sudo systemctl start stat_client
sudo systemctl restart stat_client
sudo systemctl status stat_client
查看日志
journalctl -u stat_client -f -n 100
服务端
sudo vim /etc/systemd/system/stat_server.service
注意修改 User、Group、WorkingDirectory、ExecStart
cat > /etc/systemd/system/stat_server.service <<EOF
# /etc/systemd/system/stat_server.service
[Unit]
Description=ServerStatus-Rust Server
After=network.target
[Service]
User=vfly2
Group=vfly2
Environment="RUST_BACKTRACE=1"
WorkingDirectory=/home/vfly2/myserve/serverstatus
ExecStart=/home/vfly2/myserve/serverstatus/stat_server -c /home/vfly2/myserve/serverstatus/config.toml
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
加载配置
sudo systemctl daemon-reload
开机自启,立即启动
sudo systemctl enable --now stat_server
sudo systemctl stop stat_server
sudo systemctl start stat_server
sudo systemctl restart stat_server
sudo systemctl status stat_server
原文链接: https://yanh.tech/2023/06/installation-tutorial-of-serverstatus-rust/
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech) 。
保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,或在支持 ActivityPub 的平台关注 @vfly2tech@yanh.tech
接收新文章的推送,如果能留言互动就更好了。
可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。