banner
keney

keney

remain optimistic
twitter

多サーバー監視パネル

✨ Rust 版 ServerStatus プローブ、パワーアップ版

プロジェクトアドレス:zdz/ServerStatus-Rust: ✨ Rust 版 ServerStatus プローブ、パワーアップ版 (github.com)

公式チュートリアル:インストールデプロイ - Rust 版 ServerStatus クラウドプローブ (ssr.rs)

オンラインアドレス:ServerStatus (ssr.rs)

これはマルチサーバーモニタリングツールです

効果は以下の通り:

image

1 準備作業#

環境:centos7 サーバー 2 台(香港サーバーの使用を推奨)

海外のサーバーを使用することをお勧めします。国内のサーバーはリポジトリコードの取得が遅く、感動的です。

例えば:あなたのサーバー環境が海外環境をサポートしていない場合、スクリプト実行中にリモートリポジトリコードを取得する際にタイムアウトが発生し、完了できない状況になります。
ここでは手動でインストールを行い、スクリプトに基づいて大まかに完了しました。

注:この前にサーバーとクライアントが何であるか、クライアントとサーバーをどのように関連付けるかを理解する必要があります。

サーバー(Server)は通常、何らかのサービスやリソースを提供するコンピュータまたはデバイスを指します。

クライアント(Client)は、サーバーが提供するサービスやリソースを使用するコンピュータまたはデバイスを指します。

サーバーとクライアントはコンピュータネットワークにおける 2 つの役割であり、サーバーはサービスやリソースを提供し、クライアントはサービスを使用したりリソースを取得したりします。彼らはネットワークを介して通信し、データの転送と相互作用を実現します。

典型的なクライアント - サーバーモデルでは、通常、複数のクライアントと 1 つのサーバー間の通信が存在します。これは、サーバーの目標が複数のクライアントにサービスやリソースを提供することだからです。

クライアントとサーバーの数は 1 対多の関係に限らず、複数のサーバーが存在することもあります。

クライアントとサーバーは通常 1 つだけでなく、複数のクライアントと 1 つまたは複数のサーバー間の通信が存在することができます。このような多対一または多対多の関係は、大規模なアプリケーションやシステムのニーズを満たし、より良いパフォーマンス、信頼性、拡張性を提供するためのものです。

例えば:

frp を構築する際に、Frp を中継サーバーとして使用し、リモートデスクトップに接続します。

この ServerStatus_Rust は frp の構築と同様の原理であり、1 つのサーバーと 1 つのクライアントです。

大まかな流れ:外部ネットワークがサーバーに接続し、frp で構成されたサーバーを介してローカル Windows デスクトップに接続します。

ここで構成されている frp サーバーはサーバーであり、クライアントはローカル Windows デスクトップです

より適切な画像を一枚:

image-20230626020256880

その中でサーバーもクライアントとして機能し、自分自身にリアルタイムでデータを送信して自身のデータの変化を検出することができます(負荷、トラフィック、メモリなどに限らず)

サーバーアーキテクチャの検出:

uname -a

ダウンロード:Release v1.7.2 · zdz/ServerStatus-Rust (github.com)

あなたのサーバーが x86 64 の場合、以下の図のインストールパッケージを選択してください。

それをサーバーの /opt/ServerStatus/ ディレクトリにアップロードし、サーバーはクライアントとサーバーの両方をアップロードする必要があります

ディレクトリを作成:

mkdir -p /opt/ServerStatus && cd /opt/ServerStatus

2 サーバーの構築#

サーバーとクライアントをインストールする必要があります

server.sh の設定:

#!/bin/bash
set -ex

WORKSPACE=/opt/ServerStatus
mkdir -p ${WORKSPACE}
cd ${WORKSPACE}

# ダウンロード, armマシンはx86_64をaarch64に置き換え
OS_ARCH="x86_64"
latest_version=$(curl -m 10 -sL "https://api.github.com/repos/zdz/ServerStatus-Rust/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')

wget --no-check-certificate -qO "server-${OS_ARCH}-unknown-linux-musl.zip"  "https://github.com/zdz/ServerStatus-Rust/releases/download/${latest_version}/server-${OS_ARCH}-unknown-linux-musl.zip"
wget --no-check-certificate -qO "client-${OS_ARCH}-unknown-linux-musl.zip"  "https://github.com/zdz/ServerStatus-Rust/releases/download/${latest_version}/client-${OS_ARCH}-unknown-linux-musl.zip"

unzip -o "server-${OS_ARCH}-unknown-linux-musl.zip"
unzip -o "client-${OS_ARCH}-unknown-linux-musl.zip"

# systemdサービス
mv -v stat_server.service /etc/systemd/system/stat_server.service
mv -v stat_client.service /etc/systemd/system/stat_client.service

systemctl daemon-reload

# 起動
systemctl start stat_server
systemctl start stat_client

# ステータス確認
systemctl status stat_server
systemctl status stat_client

# 以下のコマンドで自動起動を設定
# systemctl enable stat_server
# systemctl enable stat_client

# 停止
# systemctl stop stat_server
# systemctl stop stat_client

# https://fedoraproject.org/wiki/Systemd/zh-cn
# https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html

# /etc/systemd/system/stat_client.serviceファイルを変更し、IPをサーバーのIPまたはドメイン名に変更します

実行:

bash -ex server.sh

実行できない場合は、手動で一歩ずつ実行してください。

mkdir -p /opt/ServerStatus && cd /opt/ServerStatus
//サーバーとクライアントの圧縮ファイルを/opt/ServerStatusディレクトリにアップロード
//解凍
unzip -o server-x86_64-unknown-linux-musl.zip
unzip -o client-x86_64-unknown-linux-musl.zip
//llコマンドで解凍が成功したか、stat_client.serviceファイルがあるか確認
//そのファイルを /etc/systemd/system/stat_client.service に移動
mv -v stat_client.service /etc/systemd/system/stat_client.service

# systemdサービス
mv -v stat_server.service /etc/systemd/system/stat_server.service
mv -v stat_client.service /etc/systemd/system/stat_client.service

systemctl daemon-reload

# 起動
systemctl start stat_server
systemctl start stat_client

# ステータス確認
systemctl status stat_server
systemctl status stat_client

# 以下のコマンドで自動起動を設定
# systemctl enable stat_server
# systemctl enable stat_client

# 停止
# systemctl stop stat_server
# systemctl stop stat_client

設定を変更:

image
コメントを外す、つまり #を外します

後ろのアドレスを自分のサーバーのリバースプロキシのドメイン名に置き換えます

例えばあなたのドメインが:https://w.lxip.top

ならば置き換え後はhttps://w.lxip.top/report になります

リバースプロキシを使用したくない場合、または面倒だと思う場合は、サーバーのパブリック IP アドレス + ポート番号を直接使用しても構いません

例えばアドレス:http://139.212.12.120:8080 (サーバー上の)、直接置き換えても大丈夫です

サーバーとクライアントの関連関係:

image-20230626012319564

image-20230626012950615

config.toml ファイルはサーバーに対応しています

設定が完了したら以下の通り:

image-20230626013208676

サーバーは Railway などのサードパーティプラットフォームを使用して構築することもできます

Railway デプロイチュートリアル

3 クライアントの構築#

client.sh の設定

#!/bin/bash
set -ex

WORKSPACE=/opt/ServerStatus
mkdir -p ${WORKSPACE}
cd ${WORKSPACE}

# ダウンロード, armマシンはx86_64をaarch64に置き換え
OS_ARCH="x86_64"
latest_version=$(curl -m 10 -sL "https://api.github.com/repos/zdz/ServerStatus-Rust/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')

wget --no-check-certificate -qO "client-${OS_ARCH}-unknown-linux-musl.zip"  "https://github.com/zdz/ServerStatus-Rust/releases/download/${latest_version}/client-${OS_ARCH}-unknown-linux-musl.zip"

unzip -o "client-${OS_ARCH}-unknown-linux-musl.zip"

# systemdサービス
mv -v stat_client.service /etc/systemd/system/stat_client.service

systemctl daemon-reload

# 起動
systemctl start stat_client

# ステータス確認
systemctl status stat_client

# 以下のコマンドで自動起動を設定
systemctl enable stat_client

# 停止
# systemctl stop stat_client

# https://fedoraproject.org/wiki/Systemd/zh-cn
# https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html

# /etc/systemd/system/stat_client.serviceファイルを変更し、IPをサーバーのIPまたはドメイン名に変更します

実行:

bash -ex client.sh

実行できない場合は、手動で一歩ずつ実行してください。

//再帰的にディレクトリを作成
mkdir -p /opt/ServerStatus && cd /opt/ServerStatus
//クライアントの圧縮ファイルを/opt/ServerStatusディレクトリにアップロード
//解凍
unzip -o client-x86_64-unknown-linux-musl.zip
//llコマンドで解凍が成功したか、stat_client.serviceファイルがあるか確認
//そのファイルを /etc/systemd/system/stat_client.service に移動
mv -v stat_client.service /etc/systemd/system/stat_client.service

//再起動して読み込み
systemctl daemon-reload

# 起動
systemctl start stat_client

# ステータス確認
systemctl status stat_client

すべてのインストールが完了したら、以下のようになります:
image

クライアントをサーバーに登録:

stat_client.service ファイルを開く:

vim /etc/systemd/system/stat_client.service

以下のように変更:

image

設定変更は以下の通り:

image-20230626014148113

4 nginx リバースプロキシの構築#

主にポート番号を持つアドレスをドメイン(二次ドメイン)にリバースプロキシするために使用されます

IP アドレス + ポート番号の形式でアクセスする場合は、リバースプロキシは必要ありませんので、このステップを省略できます。

参考:ServerStatus-Rust リバースプロキシ構築部分

ServerStatus リバースプロキシ構築部分

5 サーバーとクライアントのアンインストール:#

  1. 以前に起動したサービスを停止します
    サービスの状態を確認:
systemctl status stat_server
systemctl status stat_client

サービスの状態が active(アクティブ)であれば、まず停止する必要があります。以下のコマンドを使用します

systemctl stop stat_server
systemctl stop stat_client

次に、簡単にファイルを削除する方法でフォルダ内のファイルを削除します
/opt/ フォルダ内の ServerStatus フォルダを削除します(ServerStatus フォルダ内のすべての内容を含む)

rm -rf ServerStatus

注意:/* を使用してすべてのファイルを削除しないでください。誤ってデータベースを削除する可能性があります。初めて削除コマンドを使用してフォルダ内のすべての内容を削除する場合、このような問題を犯すのは非常に簡単です。
理由:大体は視覚的なインターフェースを使用する習慣があり、その思考方法を Linux に持ち込むと、Linux の削除方法が視覚的なインターフェースの削除方法と同じだと思い込んでしまい、誤操作をしやすくなります。これは非常に深刻な問題ですので、禁止します。

削除が完了したら、ll コマンドを使用して削除が完了したか確認します

次に、残りのファイルを削除する必要があります:

rf -rf /etc/systemd/system/stat_server.service
rf -rf /etc/systemd/system/stat_client.service

この 2 つのファイルがあるかどうかわからない場合は、/etc/systemd/system/ ディレクトリに切り替えて確認してから削除操作を行ってください。

image

6 拡張機能#

サーバーがダウンした場合、tg ボットや WeChat で通知を送信

7 まとめ#

私があまりにも愚かで、これを構築するのに 1 日以上かかり、さまざまな方法を試した結果、ようやく対応するスクリプトとドキュメントの見方がわかりました。少しの収穫がありました。ついに severstatus_rust の異なるサーバー間の関連性を理解し、スクリプトについてもより良い理解を得ました。

添付資料#

参考 1:自分専用のサーバーモニタリングを構築する - Ward && ServerStatus

参考 2:ServerStatus-Rust サーバープローブの構築と使用

参考 3:インストールデプロイ - Rust 版 ServerStatus クラウドプローブ (ssr.rs)

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。