Rust 版 ServerStatus 探针安装步骤

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

指标 描述
适用系统 Debian 系发行版,包括 Ubuntu, Armbian,其他发行版稍改命令一般也可;Windows 10/11
走通流程时间 15 分钟

Github: zdz/ServerStatus-Rust: ✨ Rust 版 ServerStatus 探针、威力加强版
官方文档: 介绍 – Rust 版 ServerStatus 云探针 (ssr.rs)

前置准备

  1. (非必要)一个二级域名解析到作为服务端机子的 IP 上,比如 serverstatus.vfly2.com 。既可用于 web 端界面访问,也可用于客户端联系服务端。
  2. (非必要)VPS 的网络可以访问 GitHub

安装 ServerStatus-Rust

确保安装了一些软件工具

sudo apt install -y curl unzip

获取机器架构,查找最新版本

ARCHITECTURE=$(uname -m)

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 -LO 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 结构,客户端主动上报服务端:

服务端配置

如果需要开启防火墙

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

# 开关 true 打开 telegram 机器人提醒,当下线和上线机器人会发消息
[tgbot]
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: Python 编写 Telegram机器人 – 技焉洲

更多配置 见 Releases 中 zip 压缩包里的 config.toml


在安装目录下,执行下面命令。

测试配置文件是否有效

./stat_server -c config.toml -t

根据配置发送测试消息,验证 telegram 机器人通知是否生效

./stat_server -c config.toml --notify-test

服务端运行

./stat_server -c config.toml

这时,如果没有出错,访问 IP:8080 即可看到 Web 网页。

但是现在如果断开 SSH 连接,服务端也就不运行了,使用 systemd 守护进程解决这个问题,具体内容请往下看。

若想查看地图,访问 IP:8080/map

查看帮助

./stat_server -h

hosts_group

hosts 跟 hosts_group 两种配置模式任挑一种配置即可,本文不涉及 hosts_group 的用法。

客户端配置

Linux

在安装目录下,执行下面命令。

./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

Windows

https://github.com/zdz/ServerStatus-Rust/releases 下载 Windows 平台的程序文件,选择 client-x86_64-pc-windows-msvc.zip 这种的,注意下载客户端 client。

解压,在程序文件所在目录打开命令行,执行命令(和 Linux 的一样)

stat_client -a "http://serverstatus.vfly2.com:8080/report" -u vfly2 -p 123456

如果正常启动,在 Web 网页就能看到这台机器了。

开启 vnstat

vnstat 是 Linux 的一个流量统计工具,开启 vnstat 后,server 完全依赖客户机的 vnstat 数据来显示月流量和总流量,优点是重启不丢流量数据。

在 client 端安装 vnstat

sudo apt install -y vnstat
vnstat --version   # 确保 version >= 2.6

修改 vnstat 配置文件

vim /etc/vnstat.conf
# 置空 Interface 可以自动选择网口
# 或者手动指定
systemctl restart vnstat

测试查看月流量,可以显示是哪个网卡

vnstat -m
vnstat --json m

client 加上 -n 参数开启 vnstat 统计

./stat_client -a "grpc://127.0.0.1:9394" -u h1 -p p1 -n

[[48vnstat 统计流量]]

Systemd 守护进程

客户端

sudo vim /etc/systemd/system/stat_client.service

注意修改 User、Group、WorkingDirectory、ExecStart

# /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

# journalctl -u stat_client -f -n 100

加载配置

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

Windows Service 管理

在 Windows 平台使用其服务功能管理程序,可以实现程序意外退出后的自动重启和开机自启,具体步骤请看:以 Windows 服务运行并开机自启 – 技焉洲


原文链接: https://yanh.tech/2023/06/installation-tutorial-of-serverstatus-rust/

版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech)

保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。

可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。

暂无评论

发送评论 编辑评论


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