Giter Site home page Giter Site logo

zdz / serverstatus-rust Goto Github PK

View Code? Open in Web Editor NEW
1.6K 1.6K 295.0 1.96 MB

✨ Rust 版 ServerStatus 探针、威力加强版

Home Page: https://ssr.rs

License: Apache License 2.0

Dockerfile 0.22% Python 14.36% Rust 70.59% HTML 3.11% Shell 11.66% Procfile 0.05%
probe railway rust serverstatus serverstatus-rust telegram vnstat webhook wechat

serverstatus-rust's Introduction

✨ Rust 版 ServerStatus 云探针

image

image

Table of Contents

1. 介绍

ServerStatus 威力加强版,保持轻量和简单部署,增加以下主要特性:

  • 使用 rust 完全重写 serverclient,单个执行文件部署
  • 多系统支持 LinuxMacOSWindowsAndroidRaspberry Pi
  • 支持上下线和简单自定义规则告警 (telegramwechatemailwebhook)
  • 支持 http 协议上报,方便部署到各免费容器服务和配合 cf 等优化上报链路
  • 支持 cloudflare tunnelsmTLS 部署
  • 支持主机分组动态注册,简化配置
  • 支持 vnstat 统计月流量,重启不丢流量数据
  • 支持 railway 快速部署
  • 支持 systemd 开机自启
  • 其它功能,如 🗺️ 见 wiki

演示:ssr.rs | cn dns | 下载:Releases | Changelog | 反馈:Discussions

📚 完整文档迁移至 doc.ssr.rs

📚 保姆级教程 Google | Bing

🍀 主题

如果你觉得你创造/修改的主题还不错,欢迎分享/PR,前端单独部署方法参考 #37

ServerStatus-theme 主题

作者 @JingBh 👉 主题地址 支持快速部署一键命令生成

image image

演示:Demo

ServerStatus-Theme-Light 主题

👉 主题地址 作者 @orilights

image

演示:Demo

Hotaru 主题

Hotaru 主题由 @HinataKato 修改提供,主题地址

image
ServerStatus-web 主题

ServerStatus-web 主题由 @mjjrock 修改提供,主题地址

image
v1.5.7 版本主题

演示:Demo

image

2. 安装部署

2.1 快速体验

# for CentOS/Debian/Ubuntu x86_64
mkdir -p /opt/ServerStatus && cd /opt/ServerStatus
# apt install -y unzip / yum install -y unzip
wget --no-check-certificate -qO one-touch.sh 'https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/scripts/one-touch.sh'
bash -ex one-touch.sh
# 部署完毕,打开 http://127.0.0.1:8080/ 或 http://<你的IP>:8080/
# 自定义部署可参照 scripts/one-touch.sh 脚本

2.2 快速部署

👉 快速部署

2.3 服务管理脚本

服务管理脚本说明

@Colsro & @Yooona-Lim 贡献

# 下载脚本
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和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
    -h,--help       查看帮助
若无法访问 Github:
    CN=true bash status.sh args

2.4 Railway 部署

懒得配置 NginxSSL 证书?试试 在 Railway 部署 Server

Deploy on Railway

2.5 Heroku 部署

如何在 Heroku 上部署 Rust 版 ServerStatus 云探针

3. 服务端说明

3.1 配置文件 config.toml

# 侦听地址, 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_pass = ""

# hosts 跟 hosts_group 两种配置模式任挑一种配置即可
# name 主机唯一标识,不可重复,alias 为展示名
# notify = false 单独禁止单台机器的告警,一般针对网络差,频繁上下线
# monthstart = 1 没启用vnstat时,表示月流量从每月哪天开始统计
# disabled = true 单机禁用
# location 支持国旗 emoji https://emojixd.com/group/flags
# 或国家缩写,如 cn us 等等,所有国家见目录 web/static/flags
# 自定义标签 labels = "os=centos;ndd=2022/11/25;spec=2C/4G/60G;"
# os 标签可选,不填则使用上报数据,ndd(next due date) 下次续费时间, spec 为主机规格
# os 可用值 centos debian ubuntu alpine pi arch windows linux
hosts = [
  {name = "h1", password = "p1", alias = "n1", location = "🏠", type = "kvm", labels = "os=arch;ndd=2022/11/25;spec=2C/4G/60G;"},
  {name = "h2", password = "p2", alias = "n2", location = "🏢", type = "kvm", disabled = false},
  {name = "h3", password = "p3", alias = "n3", location = "🏡", type = "kvm", monthstart = 1},
  {name = "h4", password = "p4", alias = "n4", location = "cn", type = "kvm", notify = true, labels = "ndd=2022/11/25;spec=2C/4G/60G;"},
]

# 动态注册模式,不再需要针对每一个主机做单独配置
# gid 为模板组id, 动态注册唯一标识,不可重复
hosts_group = [
  # 可以按国家地区或用途来做分组
  {gid = "g1", password = "pp", location = "🏠", type = "kvm", notify = true},
  {gid = "g2", password = "pp", location = "🏢", type = "kvm", notify = true},
  # 例如不发送通知可以单独做一组
  {gid = "silent", password = "pp", location = "🏡", type = "kvm", notify = false},
]
# 动态注册模式下,无效数据清理间隔,默认 30s
group_gc = 30

# 不开启告警,可忽略后面配置,或者删除不需要的通知方式
# 告警间隔默认为30s
notify_interval = 30
# https://core.telegram.org/bots/api
# https://jinja.palletsprojects.com/en/3.0.x/templates/#if
[tgbot]
# 开关 true 打开
enabled = false
bot_token = "<tg bot token>"
chat_id = "<chat id>"
# host 可用字段见 payload.rs 文件 HostStat 结构, {{host.xxx}} 为占位变量
# 例如 host.name 可替换为 host.alias,大家根据自己的喜好来编写通知消息
# {{ip_info.query}} 主机 ip,  {{sys_info.host_name}} 主机 hostname
title = "❗<b>Server Status</b>"
online_tpl =  "{{config.title}} \n😆 {{host.location}} {{host.name}} 主机恢复上线啦"
offline_tpl = "{{config.title}} \n😱 {{host.location}} {{host.name}} 主机已经掉线啦"
# custom 模板置空则停用自定义告警,只保留上下线通知
custom_tpl = """
{% if host.memory_used / host.memory_total > 0.5  %}
<pre>😲 {{host.name}} 主机内存使用率超50%, 当前{{ (100 * host.memory_used / host.memory_total) | round }}%  </pre>
{% endif %}

{% if host.hdd_used / host.hdd_total  > 0.5  %}
<pre>😲 {{host.name}} 主机硬盘使用率超50%, 当前{{ (100 * host.hdd_used / host.hdd_total) | round }}% </pre>
{% endif %}
"""

# wechat, email, webhook 等其它通知方式 配置详细见 config.toml

3.2 服务端运行

# systemd 方式, 参照 scripts/one-touch.sh 脚本 (推荐)

# 💪 手动方式
# help
./stat_server -h
# 手动运行
./stat_server -c config.toml
#
RUST_BACKTRACE=1 RUST_LOG=trace ./stat_server -c config.toml

# 测试配置文件是否有效
./stat_server -c config.toml -t
# 根据配置发送测试消息,验证通知是否生效
./stat_server -c config.toml --notify-test

# 🐳 docker 方式
wget --no-check-certificate -qO docker-compose.yml 'https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/docker-compose.yml'
wget --no-check-certificate -qO config.toml 'https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/config.toml'
touch stats.json
docker-compose up -d

4. 客户端说明

系统版本&架构
OS Release
Linux x86_64 x86_64-unknown-linux-musl
Linux arm64 aarch64-unknown-linux-musl
MacOS x86_64 x86_64-apple-darwin
MacOS arm64 aarch64-apple-darwin
Windows x86_64 x86_64-pc-windows-msvc
Raspberry Pi armv7-unknown-linux-musleabihf
Android 64bit aarch64-linux-android
Android 32bit armv7-linux-androideabi

4.1 Rust 版 Client

# 公网环境建议 headscale/nebula 组网或走 https, 使用 nginx 对 server 套 ssl 和自定义 location /report
# alpine linux 需要安装相关命令 apk add procps iproute2 coreutils
# 如果 Rust 版客户端在你的系统无法使用,请切换到下面 4.2 Python 跨平台版本

# systemd 方式, 参照 scripts/one-touch.sh 脚本 (推荐)

# 💪 手动方式
# Rust 版本 Client
./stat_client -h
./stat_client -a "http://127.0.0.1:8080/report" -u h1 -p p1
#
./stat_client -a "grpc://127.0.0.1:9394" -u h1 -p p1
# 不同的主机可以运行相同的命令注册到同一组
./stat_client -a "http://127.0.0.1:8080/report" -g g1 -p pp --alias "$(hostname)"

# rust client 可用参数
./stat_client -h
OPTIONS:
    -6, --ipv6                   ipv6 only, default:false
    -a, --addr <ADDR>            [default: http://127.0.0.1:8080/report]
        --alias <ALIAS>          alias for host [default: unknown]
        --cm <CM_ADDR>           China Mobile probe addr [default: cm.tz.cloudcpp.com:80]
        --ct <CT_ADDR>           China Telecom probe addr [default: ct.tz.cloudcpp.com:80]
        --cu <CU_ADDR>           China Unicom probe addr [default: cu.tz.cloudcpp.com:80]
        --disable-extra          disable extra info report, default:false
        --disable-notify         disable notify, default:false
        --disable-ping           disable ping, default:false
        --disable-tupd           disable t/u/p/d, default:false
    -g, --gid <GID>              group id [default: ]
    -h, --help                   Print help information
        --ip-info                show ip info, default:false
        --ip-source <IP_SOURCE>  ip info source [env: SSR_IP_SOURCE=] [default: ip-api.com]
        --sys-info               show sys info, default:false
        --json                   use json protocol, default:false
        --location <LOCATION>    location [default: ]
    -n, --vnstat                 enable vnstat, default:false
        --vnstat-mr <VNSTAT_MR>  vnstat month rotate 1-28 [default: 1]
    -p, --pass <PASS>            password [default: p1]
    -t, --type <HOST_TYPE>       host type [default: ]
    -u, --user <USER>            username [default: h1]
    -V, --version                Print version information
    -w, --weight <WEIGHT>        weight for rank [default: 0]

# 一些参数说明
--ip-info       # 显示本机ip信息后立即退出,目前使用 ip-api.com 数据
--ip-source     # 指定 ip 信息源,ip-api.com / ip.sb / ipapi.co / myip.la
--sys-info      # 显示本机系统信息后立即退出
--disable-extra # 不上报系统信息和IP信息
--disable-ping  # 停用三网延时和丢包率探测
--disable-tupd  # 不上报 tcp/udp/进程数/线程数,减少CPU占用
-w, --weight    # 排序加分,微调让主机靠前显示,无强迫症可忽略
-g, --gid       # 动态注册的组id
--alias         # 动态注册模式下,指定主机的展示名字
# 总流量,网卡流量/网速统计
-i, --iface         # 非空时,只统计指定网口
-e, --exclude-iface # 排除指定网口,默认排除 "lo,docker,vnet,veth,vmbr,kube,br-"

4.2 Python 版 Client

Python 版 Client 说明
# Python 版本 Client 依赖安装
## Centos
yum -y install epel-release
yum -y install python3-pip gcc python3-devel
python3 -m pip install psutil requests py-cpuinfo

## Ubuntu/Debian
apt -y install python3-pip
python3 -m pip install psutil requests py-cpuinfo

## Alpine linux
apk add wget python3 py3-pip gcc python3-dev musl-dev linux-headers
apk add procps iproute2 coreutils
python3 -m pip install psutil requests py-cpuinfo

wget --no-check-certificate -qO stat_client.py 'https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/client/stat_client.py'

## Windows
# 安装 python 3.10 版本,并设置环境变量
# 命令行执行 pip install psutil requests
# 下载 https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/client/stat_client.py
pip install psutil requests py-cpuinfo

python3 stat_client.py -h
python3 stat_client.py -a "http://127.0.0.1:8080/report" -u h1 -p p1

5. 开启 vnstat 支持

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

开启 vnstat 设置
# 在client端安装 vnstat
## Centos
sudo yum install epel-release -y
sudo yum install -y vnstat
## Ubuntu/Debian
sudo apt install -y vnstat

# 修改 /etc/vnstat.conf
# BandwidthDetection 0
# MaxBandwidth 0
# 默认不是 eth0 网口的需要置空 Interface 来自动选择网口
# 没报错一般不需要改
# Interface ""
systemctl restart vnstat

# 确保 version >= 2.6
vnstat --version
# 测试查看月流量 (刚安装可能需等一小段时间来采集数据)
vnstat -m
vnstat --json m

# client 使用 -n 参数开启 vnstat 统计
./stat_client -a "grpc://127.0.0.1:9394" -u h1 -p p1 -n
#
python3 stat_client.py -a "http://127.0.0.1:8080/report" -u h1 -p p1 -n

6. FAQ

如何使用自定义主题

更简单的方式 👉 #37

server {
  # ssl, domain 等其它 nginx 配置

  # 反代 /report 请求
  location = /report {
    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_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;

    proxy_pass http://127.0.0.1:8080/report;
  }
  # 反代 json 数据请求
  location = /json/stats.json {
    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_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;

    proxy_pass http://127.0.0.1:8080/json/stats.json;
  }
  # v1.4.0后,同样需要反代  /detail, /map

  # 其它 html,js,css 等,走本地文本
  location / {
    root   /opt/ServerStatus/web; # 你自己修改的主题目录
    index  index.html index.htm;
  }
}
如何源码编译
#
cargo install stat_server
cargo install stat_client
# or
# 按提示安装 rust 编译器
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
yum install -y openssl-devel
git clone https://github.com/zdz/ServerStatus-Rust.git
cd ServerStatus-Rust
cargo build --release
# 编译好的文件目录 target/release
如何自定义 ping 地址
# 例如自定义移动探测地址,用 --cm 指定地址
./stat_client -a "grpc://127.0.0.1:9394" -u h1 -p p1 --cm=cm.tz.cloudcpp.com:80

# 电信联通参数可以使用 -h 命令查看
./stat_client -h
OPTIONS:
    --cm <CM_ADDR>    China Mobile probe addr [default: cm.tz.cloudcpp.com:80]
    --ct <CT_ADDR>    China Telecom probe addr [default: ct.tz.cloudcpp.com:80]
    --cu <CU_ADDR>    China Unicom probe addr [default: cu.tz.cloudcpp.com:80]
关于这个轮子

之前一直在使用 Prometheus + Grafana + Alertmanager + node_exporter 做VPS监控,这也是业界比较成熟的监控方案,用过一段时间后,发现非生产环境,很多监控指标都用不上,运维成本有点大。 而 ServerStatus 很好,足够简单和轻量,一眼可以看尽所有小机机,只是 c++ 版本很久没迭代过,自己的一些需求在原版上不是很好修改,如自带 tcp 上报对跨区机器不是很友好,也不方便对上报的链路做优化 等等。这是学习 Rust 练手的小项目,所以不会增加复杂功能,保持小而美,简单部署,配合 Uptime Kuma 基本上可以满足个人大部分监控需求。

7. 相关项目

8. 最后

很高兴我的代码能跑在你的服务器上,如果对你有帮助的话,欢迎留下你的 star ⭐ 支持一下

serverstatus-rust's People

Contributors

asukaminato0721 avatar dependabot[bot] avatar evilgaoshu avatar fiercex avatar harvies avatar hinatakato avatar i207m avatar kissyouhunter avatar mjjrock avatar mobeicanyue avatar mslxi avatar n0thing2speak avatar renovate-bot avatar renovate[bot] avatar snowie2000 avatar xkrfer avatar zdz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

serverstatus-rust's Issues

stat_client 在 Alpine 上运行报错

尝试在Alpine Linux下运行报错如下:

./stat_client -a "https://host/report" -u user -p pass
[client/src/main.rs:297] &args = Args {
    addr: "https://host/report",
    user: "user",
    pass: "pass",
    vnstat: false,
    disable_tupd: false,
    disable_ping: false,
    ct_addr: "ct.tz.cloudcpp.com:80",
    cm_addr: "cm.tz.cloudcpp.com:80",
    cu_addr: "cu.tz.cloudcpp.com:80",
}
thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 2', client/src/status.rs:187:25
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Aborted

client版本为 1.3.5
相同配置在debian11中正常运行

1.7.1-1.7.0兼容问题

1.7.0的server直接用快速脚本似乎下载了1.7.1的client导致上报数据解析错误.
建议1.7.0和1.7.1之间互相兼容一下.

关于无法触发tg警告

我的配置文件上,配置了tg的信息,并开启了推送功能,但无法推送!

notify_interval = 30
# https://core.telegram.org/bots/api
# https://jinja.palletsprojects.com/en/3.0.x/templates/#if
[tgbot]
enabled = true
bot_token = "2xxxx67783:AAF4eCz9XMm-TSnI0xxxxxxxx7WYOEAgxqw"
chat_id = "88xxxx680"
# host 可用字段参见 payload.rs 文件 HostStat 结构, {{host.xxx}} 为占位变量
# 例如 host.name 可替换为 host.alias,大家根据喜好来编写通知消息
title = "❗<b>Server Status</b>"
online_tpl =  "{{config.title}} \n😆 {{host.location}} {{host.name}} 主机恢复上线啦"
offline_tpl = "{{config.title}} \n😱 {{host.location}} {{host.name}} 主机已经掉线啦"
# custom 模板置空则停用自定义告警,只保留上下线通知
custom_tpl = """
{% if host.memory_used / host.memory_total > 0.5  %}
<pre>😲 {{host.name}} 主机内存使用率超50%, 当前{{ (100 * host.memory_used / host.memory_total) | round }}%  </pre>
{% endif %}

{% if host.hdd_used / host.hdd_total  > 0.5  %}
<pre>😲 {{host.name}} 主机硬盘使用率超50%, 当前{{ (100 * host.hdd_used / host.hdd_total) | round }}% </pre>
{% endif %}
"""

但我通过 curl 方式区测试是正常的,能否告知我出了什么问题?

curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{"chat_id": "88xxxx680", "text": "This is a test from curl", "disable_notification": true}' \
     https://api.telegram.org/bot2xxxx67783:AAF4eCz9XMm-TSnI0xxxxxxxx7WYOEAgxqw/sendMessage

教程能否加上宝塔部署方法

我看好 Rust 版 ServerStatus,但是服务器有宝塔,通过宝塔部署没教程,完全按教程部署又怕和宝塔的nginx冲突!
求教程,方便菜鸡!

新前端的“协议”二字换行

image

如图红圈,在4K显示屏和iPad Pro 11寸上都复现了这个问题。

另:想问一下/detail/map的入口在新首页上没有看到,以后还有计划加入吗?

monthstart = 1, disabled = false这两个参数做什么用的

我翻阅了参考的链接和直接搜索了这两个参数,没有找到相关的说明

并且我使用 railway 部署遇到了favicon.ico无法部署到 railway 的问题,就是直接访问 网站地址/favicon.ico 时候出现了404,我在index.html里面从新指向到了 img/favicon.ico 后,图标才从新加载出来

Alpine Linux 的 TCP 连接数溢出

版本:最新 v1.5.7(之前版本也有此问题)

Alpine Linux 上的 Rust 客户端回报的 TCP/UDP 连线数为4294967295,怀疑是uint溢出导致的。
这一现象其实在 #18 (comment) 中也有显示:\"tcp\":4294967295,

截图:

image

提交 issue 必读(除非你并不需要解决问题)

提交 issue 前请先做以下检查

  1. 大家时间都很宝贵,为节省彼此时间,建议先阅读 提问的艺术
  2. 详细阅读文档(就这么一点文档)和对应版本的 Release 说明,是否还是不能解决问题
  3. 搜索已有的 Issues | Discussions,是否出现过
  4. nginx, tg, wx, email 配置类问题可以先尝试 google 解决
  5. serverclient 的版本是否适配,启用 vnstat 版本是否 vnstat >= 2.6
  6. server 起不来一般是配置文件版本不兼容,先使用最新版本 config.toml 修改看看,并删除 stats.json 文件
  7. 尝试最新版本是否已经修复了你的问题
  8. Bugissue 请带上错误日志和版本号(用 -V 参数可以查询到)
  9. 不确定的问题可以先走讨论区 Discussions, 并尽可能带上你的问题日志
  10. 代码,配置做好排版、格式化、格式化、格式化

脚本部署安装问题

再次提问希望老大不要生气,虽然您的文档写的很清楚,但是对于小白我来说,还是有的不理解。希望你能耐心解答下

1.#服务端安装:
wget --no-check-certificate -qO status.sh 'https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/status.sh'
bash status.sh -i -s【服务器IP为X.X.X.X】
2#安装 客户端
wget --no-check-certificate -qO status.sh 'https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/status.sh'
bash status.sh -i -c
[注意] 请输入服务端的信息, 格式为 "protocol://username:password@master:port"
protocol://h1:[email protected]:8080

不知道这样的输入是否正确。

这里的username对应以下的name ,password 对应以下的password master对应服务段IP port要么是 9394 或者8080
grpc_addr = "0.0.0.0:9394"
http_addr = "0.0.0.0:8080"

hosts = [
{name = "h1", password = "p1", alias = "n1", location = "🏠", type = "kvm", labels = "os=arch;ndd=2022/11/25;spec=2C/4G/60G;"},
{name = "h2", password = "p2", alias = "n2", location = "🏢", type = "kvm", disabled = false},
{name = "h3", password = "p3", alias = "n3", location = "🏡", type = "kvm", monthstart = 1},
{name = "h4", password = "p4", alias = "n4", location = "cn", type = "kvm", notify = true, labels = "ndd=2022/11/25;spec=2C/4G/60G;"},

最小化配置

{name = "mac", password = "pp", alias = "macos"},
{name = "pi", password = "pp", alias = "pi", labels = "os=pi"},
{name = "win", password = "pp", alias = "windows"},
{name = "android", password = "pp", alias = "android", labels = "os=android"},
]

这里的

eg:【这里eg什么意思啊】

bash status.sh -i -c grpc://h1:[email protected]:9394
bash status.sh -i -c http://h1:[email protected]:8080

127.0.0.1这个是服务端和客户端在同一台服务器上安装的方式吗

如果服务器和客户端不是同一个机器这里的127.0.0.1是不是需要改成服务端的IP地址

vnstat 配置 MonthRotate 为非 1 的天数后,当前月份流量特定时间内会错误显示为 0.00G | 0.00G

有一些机器上的流量不是按自然月刷新的,比如在15日刷新并且将 vnstatMonthRotate 也配置为15,那么在15日之前 vnstat --json m 返回的数据会存在不包含当前自然月流量信息的情况,导致 ServerStatus-Rust 显示的月流量为 0.00G | 0.00G.

vnstat json 输出样例 (省略中间部分月份)

{
    "vnstatversion": "2.6",
    "jsonversion": "2",
    "interfaces": [
        {
            "name": "eth0",
            "alias": "",
            "created": {
                "date": {
                    "year": 2022,
                    "month": 3,
                    "day": 1
                }
            },
            "updated": {
                "date": {
                    "year": 2022,
                    "month": 11,
                    "day": 6
                },
                "time": {
                    "hour": 6,
                    "minute": 25
                }
            },
            "traffic": {
                "total": {
                    "rx": 34838225310,
                    "tx": 537051064160
                },
                "month": [
                    {
                        "id": 1,
                        "date": {
                            "year": 2022,
                            "month": 3
                        },
                        "rx": 120663351707,
                        "tx": 107577662878
                    },
                    {
                        "id": 7,
                        "date": {
                            "year": 2022,
                            "month": 9
                        },
                        "rx": 37335903948,
                        "tx": 23122453659
                    },
                    {
                        "id": 8,
                        "date": {
                            "year": 2022,
                            "month": 10
                        },
                        "rx": 21771011198,
                        "tx": 9919763673
                    }
                ]
            }
        }
    ]
}

stat_server 版本:

❯ /usr/local/ServerStatus/server/stat_server --version
stat_server v1.5.6 GIT:51f17c7, BUILD:2022-11-02 16:17:06 UTC

stat_client 版本:

❯ /usr/local/ServerStatus/client/stat_client --version
stat_client v1.5.6 GIT:51f17c7, BUILD:2022-11-02 16:17:07 UTC

stat_client运行报错。连接运行正常

Feb 24 01:06:13 winter stat_client[873]: ERROR stat_client > report error => reqwest::Error { kind: Request, url: Url { scheme: "https", cannot_be_a_base: false, 用户名: "", 密码:无,主机:一些(域(“ss.******.xyz”)),端口:无,路径:“/report”,查询:无,片段:无},来源:hyper::Error( Connect, ConnectError("tcp connect error", Os { code: 111, kind: ConnectionRefused, message: "Connection refused" })) }甲骨文云arm,本机安装
服务端和客户端。正常连接,数据正常。查看客户端状态systemctl status stat_client,显示上面的错误,有6条。不知道是怎么回事?谢谢

保留显示离线客户端的最后数据

目前在客户端掉线后,该主机对应的条目将会隐藏掉所有信息,但有时候机器掉线前的状态对排错很有帮助。是否可以增加一个选项,客户端掉线时仅改变显示方式(比如改变对应行的配色,增加⚠️标志等),在服务器运行期间维持显示之前收到的数据,客户端重新上线后恢复?

log无限占用存储空间

主控是docker版的最新的,就这几天装的。log文件只存储不清理,几天时间就占了80+g

请问若无法访问 Github,CN=true bash status.sh args

您好,确实在很多场景都被卡住了无法继续安装测试,但注意到您这句备注“若无法访问 Github:
CN=true bash status.sh args”,但不知是何种解决方式,是脚本直接可以解决吗?请指教
,感谢帮助!

可以增加一个推送间隔的参数吗

我通过网页F12查看到信息是在不停的推送的,希望可以增加一个时间参数,用来设置间隔多少秒推送一次服务器信息,这个我自己判断是在服务端进行的?不是很确定,希望能增加这样一个功能

探针最后一栏【联通 | 电信 | 移动】显示不全

大佬,脚本部署,1.57版本,尝试了3款浏览器:360,Chrome,Firefox,在最后一栏的【联通 | 电信 | 移动】显示不全。

请教下,应该怎么解决?

恐表述不清,直接上图说明(标记红框处就是显示有缺的)

Chrome【100%显示比例,最后一列标题还出现了换行,对应数据显示不全】:
image

Firefox【100%显示比例,最后一列标题单行正常,对应数据显示不全】:
image

360【100%显示比例,最后一列标题单行正常,对应数据显示不全】:
image

自定义 ping 地址

自定义 ping 地址可以任意设置地址吗?可以设置为自己的ip,用域名设置吗?我尝试了一下,设置为当地域名能正确获取,如sc.189.cn:80。但设置为自己的域名就不能正确获取!谢谢

手机端显示请求

谢谢作者的app,已经布置好了,确实很不错👍

但是有个问题就是手机端显示,请问如何设置才能像桌面那样显示完整?(主要问题想看ping)状态。
我手机端如chrome选了显示桌面版本但是还是没有变化。

谢谢🙏

服务管理脚本部署问题咨询

使用# 下载脚本
wget --no-check-certificate -qO status.sh 'https://raw.githubusercontent.com/zdz/ServerStatus-Rust/master/status.sh'

安装 服务端

bash status.sh -i -s 【已经安装IP:168.138.X.X】

安装 客户端

bash status.sh -i -c

[注意] 请输入服务端的信息, 格式为 "protocol://username:password@master:port"

protocol://username:[email protected]:8080

请问这里的username:password都对应服务器的什么参数啊

哪里可以设置呢

动态注册无法触发TG上下线告警吗

[tgbot]
# 开关 true 打开
enabled = true
bot_token = "5688616854:AAHd-dbjLc3Ff3F4ErSYk92SdMqwFPh0ob8"
chat_id = "1342176258"
# host 可用字段参见 payload.rs 文件 HostStat 结构, {{host.xxx}} 为占位变量
# 例如 host.name 可替换为 host.alias,大家根据自己的喜好来编写通知消息
# {{ip_info.query}} 主机 ip,  {{sys_info.host_name}} 主机 hostname
title = "❗<b>Server Status</b>"
online_tpl =  "{{config.title}} \n😆 {{host.location}} {{host.name}} 主机恢复上线啦"
offline_tpl = "{{config.title}} \n😱 {{host.location}} {{host.name}} 主机已经掉线啦"
# custom 模板置空则停用自定义告警,只保留上下线通知
custom_tpl = """
{% if host.memory_used / host.memory_total > 0.5  %}
<pre>😲 {{host.name}} 主机内存使用率超50%, 当前{{ (100 * host.memory_used / host.memory_total) | round }}%  </pre>
{% endif %}

{% if host.hdd_used / host.hdd_total  > 0.5  %}
<pre>😲 {{host.name}} 主机硬盘使用率超50%, 当前{{ (100 * host.hdd_used / host.hdd_total) | round }}% </pre>
{% endif %}
"""

Dec 21 17:33:58 GreenCloud.1665472394 systemd[1]: Started ServerStatus-Rust Server.
Dec 21 17:33:58 GreenCloud.1665472394 stat_server[1442]: ✨ stat_server v1.6.1 (, 2022-12-21 09:32:12 UTC, rustc 1.66.0)
Dec 21 17:33:58 GreenCloud.1665472394 stat_server[1442]: ✨ run in normal mode, load conf from local file `/usr/local/ServerSt>
Dec 21 17:33:58 GreenCloud.1665472394 stat_server[1442]: ✨ admin_user: admin
Dec 21 17:33:58 GreenCloud.1665472394 stat_server[1442]: ✨ admin_pass: xxxxxx
Dec 21 17:33:58 GreenCloud.1665472394 stat_server[1442]: 🚀 listening on http://127.0.0.1:8080
Dec 21 17:33:58 GreenCloud.1665472394 stat_server[1442]: 🚀 listening on grpc://0.0.0.0:9394

我用 #60 里面的测试代码会有一条❗️ServerStatus test msg信息 但是服务器上下线没有

服务端与客户端支持HTTPS传输

首先,感谢作者的辛苦付出,这是大伙有目共睹的。目前该探针支持grcp和http与部署在多台的客户端机器进行通信,我想能否添加支持https传输的形式?

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • fix(deps): update rust crate hyper to 1.3
  • fix(deps): update rust crate rhai to 1.18
  • fix(deps): update rust crate sysinfo to 0.30.11
  • fix(deps): update rust crate minijinja to v2
  • 🔐 Create all rate-limited PRs at once 🔐

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

cargo
client/Cargo.toml
  • anyhow 1
  • bytes 1
  • chrono 0.4
  • clap 4.5
  • fastrand 2.0.1
  • hyper 1.2
  • lazy_static 1.4
  • log 0.4
  • md5 0.7.0
  • once_cell 1
  • pretty_env_logger 0.5
  • prettytable-rs ^0.10
  • prost 0.12
  • regex 1.10
  • reqwest 0.11
  • rustls 0.23.5
  • rustls-pemfile 2
  • serde 1.0
  • serde_json 1.0
  • sysinfo 0.30.7
  • tokio 1
  • tokio-rustls 0.26
  • tonic 0.11
  • tower 0.4
  • webpki-roots 0.26
  • url 2.5.0
  • chrono 0.4
common/Cargo.toml
  • bytes 1
  • prost 0.12
  • serde 1.0
  • tonic 0.11
  • chrono 0.4
  • tonic-build 0.11
  • chrono 0.4
  • protobuf-src 1
  • tonic-build 0.11
server/Cargo.toml
  • anyhow 1
  • axum 0.7.4
  • axum-extra 0.9.2
  • bytes 1
  • chrono 0.4
  • clap 4.5
  • futures-util 0.3
  • hyper 1.2
  • jsonwebtoken 9.2
  • lazy_static 1.4
  • lettre 0.11
  • log 0.4
  • md5 0.7.0
  • minijinja 1.0
  • mime_guess 2
  • once_cell 1
  • pki-types 1
  • pretty_env_logger 0.5
  • prettytable-rs ^0.10
  • prost 0.12
  • reqwest 0.11
  • rhai 1.17
  • rust-embed 8.3
  • rustls-pemfile 2
  • serde 1.0
  • serde_json 1.0
  • tokio 1
  • tokio-rustls 0.26
  • toml 0.8
  • tonic 0.11
  • tower-http 0.5
  • url 2.5.0
  • uuid 1.7
  • chrono 0.4
docker-compose
docker-compose.yml
dockerfile
Dockerfile
  • rust 1.76-alpine3.19
Dockerfile.cloud
droneci
.drone.yml
github-actions
.github/workflows/docker.yml
  • actions/checkout v4
  • docker/setup-qemu-action v3
  • docker/setup-buildx-action v3
  • docker/login-action v3
  • docker/build-push-action v5
.github/workflows/release.yml
  • actions/checkout v3
  • actions/setup-python v4
  • PyO3/maturin-action v1
  • PyO3/maturin-action v1
  • actions/upload-artifact v3
  • svenstaro/upx-action v2
  • actions/upload-artifact v4
  • TheDoctor0/zip-release 0.7.6
  • TheDoctor0/zip-release 0.7.6
  • softprops/action-gh-release v2
  • actions/checkout v4
  • PyO3/maturin-action v1
  • PyO3/maturin-action v1
  • actions/upload-artifact v3
  • actions/upload-artifact v3
  • actions/upload-artifact v3
  • svenstaro/upx-action v2
  • actions/upload-artifact v4
  • TheDoctor0/zip-release 0.7.6
  • TheDoctor0/zip-release 0.7.6
  • softprops/action-gh-release v2
  • actions/checkout v4
  • actions-rs/toolchain v1
  • arduino/setup-protoc v1
  • actions-rs/cargo v1
  • actions-rs/cargo v1
  • svenstaro/upx-action v2
  • actions/upload-artifact v4
  • TheDoctor0/zip-release 0.7.6
  • TheDoctor0/zip-release 0.7.6
  • TheDoctor0/zip-release 0.7.6
  • TheDoctor0/zip-release 0.7.6
  • softprops/action-gh-release v2
  • actions/download-artifact v3
  • actions/setup-python v4
.github/workflows/rust.yml
  • actions/checkout v4
  • actions-rs/toolchain v1
  • Swatinem/rust-cache v2
html
web/jinja/detail_ht.jinja.html
  • zui 1.10.0
  • zui 1.10.0
  • zui 1.10.0
web/jinja/map.jinja.html
  • leaflet 1.9.4
  • leaflet 1.9.4
pep621
client/pyproject.toml
  • maturin >=1.0,<2.0
server/pyproject.toml
  • maturin >=1.0,<2.0

  • Check this box to trigger a request for Renovate to run again on this repository

不显示延迟

如图 不知道是我哪里配置出了问题,但都是照做的
image

主机信息警告能否添加显示ip功能

主机信息警告能否添加显示ip功能?比如能否显示ip(168.****.87)。

online_tpl =  "{{config.title}} \n[主机故障] {{host.alias}} ( {{host.ip}} : 主机恢复上线啦"
offline_tpl = "{{config.title}} \n[主机故障] {{host.alias}} ( {{host.ip}} ): 主机已经掉线啦"

最终TG上显示则为:

 [主机故障] 墨尔本(134.****.35) : 主机已经掉线啦
 [主机故障] 墨尔本(168.****.87) : 主机已经掉线啦

ip 可以不显示整个ip,仅仅显示首和尾,这样比较好区分。特别是在该区有相同的VPS时会比较好方便管理和区分。

ipv6 only小鸡安装的问题

纯ipv6小鸡,是否能够安装?从实际操作来看,不知道该如何配置才能实现纯ipv6小鸡安装探针,请大佬指点,非常感谢!

国内机无法检测IPV4

服务端只显示IPV6 机器是双栈的 IPV4正常可用
Dec 16 15:38:53 coal-w768p1ep stat_client[2568814]: enable feature native
Dec 16 15:38:56 coal-w768p1ep stat_client[2568814]: get_network (ipv4, ipv6) => (false, false)
Dec 16 15:38:56 coal-w768p1ep stat_client[2568814]: ERROR stat_client > refresh_ip_info error => error sending request for url (http://ip-api.com/json?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,district,zip,lat,lon,t>
Dec 16 15:38:56 coal-w768p1ep stat_client[2568814]: Caused by:
Dec 16 15:38:56 coal-w768p1ep stat_client[2568814]: 0: connection error: Connection reset by peer (os error 104)
Dec 16 15:38:56 coal-w768p1ep stat_client[2568814]: 1: Connection reset by peer (os error 104)
Dec 16 15:38:59 coal-w768p1ep stat_client[2568814]: ERROR stat_client > refresh_ip_info error => error sending request for url (http://ip-api.com/json?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,district,zip,lat,lon,t>
Dec 16 15:38:59 coal-w768p1ep stat_client[2568814]: Caused by:
Dec 16 15:38:59 coal-w768p1ep stat_client[2568814]: 0: connection error: Connection reset by peer (os error 104)
Dec 16 15:38:59 coal-w768p1ep stat_client[2568814]: 1: Connection reset by peer (os error 104)

关于卸载

请问有卸载吗?一键安装怎么卸载,谢谢!

stat_client.py 返回的丢包率数据有问题,对小数点后的数字没有格式化

已有的issues都看了,没看到类似的问题,如有重复,麻烦作者删除此issues

我的配置

❯ vnstat -v
vnStat 2.6 by Teemu Toivola <tst at iki dot fi>

文件 client/src/stat_client.py

if packet_queue.qsize() > 30:
    G_LOST_RATE[mark] = float(packet_lost) / packet_queue.qsize()

返回的数据没有去掉小数点后的数字

现象

bug

bug1

我改了一下代码

if packet_queue.qsize() > 30:
    packet_lost_rate = float(packet_lost) / packet_queue.qsize()
    G_LOST_RATE[mark] = round(packet_lost_rate,2)

关于自定义标签 labels中ndd的tg自定义通知设置请教(非Bug)

大佬,现在的版本能够设定自定义标签 labels ,其中 ndd “年月日”可以设定为小鸡的到期时间。
有没有办法通过tg自定义通知设置,来实现在小鸡到期前x天TG提醒,以便于提醒续费?
1、如果可以的话,这个自定义设置应该怎么写?
2、如果现在还不行的话,后期是否有过考虑增加这个功能?

alias不能显示

大佬您好,经过学习,已经安装了面板,有个小疑问,我用的是docker版本,面板界面“节点名”显示的是“name”,而登录面板后台,节点名显示的是“alias”展示名,是否可以调整一下?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.