Rust 版 ServerStatus 探针安装步骤

本文重在 ServerStatus 的安装流程,介绍和更多使用请到:探针 – 技焉洲 (vfly2.com)

适用系统:Debian 系发行版,包括 Ubuntu 和 Armbian,其他发行版按流程稍改命令一般也可。


Github: zdz/ServerStatus-Rust: ✨ Rust 版 ServerStatus 探针、威力加强版

前置准备

  1. 一个域名解析到作为服务端机子的ip上,比如 serverstatus.ahfei.blog 。既可用于web端界面访问,也可用于客户端联系服务端。
  2. 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

参数:(根据实际情况自行修改)

  1. 服务端地址: "http://serverstatus.vfly2.com:8080/report"
  2. 安装目录:"/home/vfly2/myserve/serverstatus"
  3. 运行软件的用户,如 root 或 1000
  4. ssr_uid:"vfly2rn" , rust_serverstatus 配置文件里的用户名
  5. ssr 密码: "123456" ,rust_serverstatus 配置文件里用户名对应的密码
  6. 是否安装服务端,填任意字符即安装服务端

若之前执行过脚本,再次运行就会覆盖原来的,也就是实现了更新。
不过需要重启客户端或服务端 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 交流依文章步骤遇到的问题。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇