Ubuntu16.04にNATSをインストールして構成する方法

前書き

[ NATS](http://nats.io/)は、オープンソースの高性能メッセージングシステムであり、「クラウドの中枢神経系」と呼ばれることもあります。毎秒数百万のメッセージをルーティングできるため、マイクロサービスと* Internet of Things IoT *)デバイスの接続に最適です。

NATSは* PubSubメッセージングシステムです。このようなシステムでは、1つ以上のパブリッシャーが特定のトピックを含むメッセージメッセージブローカーに送信し、メッセージブローカーはこれらのメッセージを特定のトピックの任意のクライアントまたはサブスクライバー*に配信します。パブリッシャーはサブスクライバーを理解していないか、気にかけていません。その逆も同様です。このアーキテクチャでは、システムの他の部分に影響を与えることなくパブリッシャーとサブスクライバーを追加できるため、システムの拡張と新しい機能の追加が簡単になります。このタイプのシステムは、サーバーやデバイスの監視に非常に適しています。デバイスはメッセージを送信したり、これらのメッセージをサブスクライブしたり、電子メールやその他の手段で通知を送信したりできます。

このチュートリアルでは、公式の gnatsd NATSサーバーをサービスとしてインストールし、安全な方法でアクセスします。また、サーバーの負荷が高すぎる場合に電子メールを送信し、メッセージエージェントとして gnatsdを使用する、基本的なサーバー過負荷警告システムを作成します。

準備 ##

このチュートリアルを完了するには、次のものが必要です。

ステップ1-NATSサーバーをダウンロードする

最初に gnatsdサーバーをダウンロードして、問題なくシステム上で実行できることを確認しましょう。

このチュートリアルが書かれた時点での最新の安定した gnatsdバージョンはバージョン0.9.4です。 [NATSダウンロードページ](http://nats.io/download)で上位バージョンを入手できます。新しいバージョンを使用する場合は、必要に応じて以下のコマンドを調整できます。

まず、root以外のアカウントを使用してサーバーにログインします。

ssh sammy@your_server_ip

次に、ユーザーのホームディレクトリにいることを確認します。

cd

次に、 wgetを使用して gnatsdをサーバーにダウンロードします。

wget https://github.com/nats-io/gnatsd/releases/download/v0.9.4/gnatsd-v0.9.4-linux-amd64.zip

ダウンロードしたアーカイブは圧縮アーカイブであるため、ファイルを解凍するには unzipをインストールする必要があります。 aptでインストールできます:

sudo apt-get install -y unzip

次に、 unzipを使用して gnatsdを抽出します。

unzip -p gnatsd-v0.9.4-linux-amd64.zip gnatsd-v0.9.4-linux-amd64/gnatsd > gnatsd

次に、 gnatsd実行可能ファイルを作成して実行します。

chmod +x gnatsd

テストしてみましょう。現在のディレクトリから実行することで gnatsdを実行できます。次のコマンドで gnatsdを起動します。

. /gnatsd --addr 127.0.0.1--port 4222

表示される出力は、次の例のようになります。

[1851]2016 /09/2305:20:02.247420[INF] Starting nats-server version 0.9.4[1851]2016/09/2305:20:02.248182[INF] Listening for client connections on 127.0.0.1:4222[1851]2016/09/2305:20:02.248626[INF] Server is ready

デフォルトでは、 gnatsdはすべてのインターフェイスに対応する 4222アドレスのポート 0.0.0.0でリッスンします。 --portパラメータを使用すると、ポートを変更でき、 --addrを使用してリスニングアドレスを変更できます。 gnatsd --addr 127.0.0.1で実行するため、サーバー上でのみアクセスでき、外部クライアントからはアクセスできません。このチュートリアルの後半で、 gnatsdが世界に公開されていることを確認します。

CTRL + Cを押して gnatsdを閉じます。

物事が機能することがわかったので、より正式な方法で設定しましょう。

ステップ2-ディレクトリ構造と構成ファイルを作成する

Linuxでは、サードパーティのサービス関連ソフトウェアが / srvディレクトリに保存されることがよくあります。この規則に従い、NATS関連のファイルを / srv / natsの下に保持します。 gnatsd実行可能ファイルを / srv / nats / binに置きます。

まず、 / srv / nats / binフォルダーを作成します。

sudo mkdir -p /srv/nats/bin

次に、 gnatsd / srv / nats / binフォルダーに移動します。

sudo mv ~/gnatsd /srv/nats/bin

サーバーはファイルから構成をロードできます。これは、このチュートリアルの後半でサーバー設定を変更する必要がある場合に役立ちます。ファイル / srv / nats / gnatsd.configを作成します。

sudo nano /srv/nats/gnatsd.config

そして、ファイルに以下を追加します。

port:4222
net:'127.0.0.1'

この構成ファイルは、以前と同様に、アドレス 127.0.0.1のポート 4222でリッスンするように gnatsdサーバーに指示しますが、今回はコマンドラインでこれらのオプションを指定する必要はありません。

サーバーを再度実行して、サーバーが正しく構成されていることを確認しましょう。次のコマンドを実行して、新しい構成ファイルで gnatsdを開始します。

/srv/nats/bin/gnatsd -c /srv/nats/gnatsd.config

出力は、前に見たものと似ています。

[1869]2016 /06/1805:30:55.988856[INF] Starting nats-server version 0.9.4[1869]2016/06/1805:30:55.989190[INF] Listening for client connections on 127.0.0.1:4222[1869]2016/06/1805:30:55.989562[INF] Server is ready

もう一度 CTRL + Cを押して gnatsdを閉じ、プロンプトに戻ります。それでは、このサービスを実行するユーザーを作成しましょう。

ステップ3-サービスユーザーの作成

独自のユーザーアカウントで各サービスを実行して、サービスが危険にさらされたときの被害を制限することは、優れたセキュリティ対策です。 NATSサービスとNATS関連ファイルを使用してユーザーとグループを作成しましょう。

まず、 natsという名前のシステムユーザーとグループを作成しましょう。

sudo adduser --system --group --no-create-home --shell /bin/false nats
OutputAdding system user `nats' (UID 106) ...
Adding new group `nats' (GID 114)...
Adding newuser`nats' (UID 106) with group `nats' ...
Not creating home directory `/home/nats'.

/ bin / falseシェルを natsシステムユーザーに割り当てて、このユーザーのログインを無効にし、ホームディレクトリの作成を禁止します。また、 natsグループを作成しました。

/ srvディレクトリの所有者を natsユーザーとグループに変更しましょう。

sudo chown -R nats:nats /srv

natsユーザーとグループを作成したので、引き続きNATSサービスを作成しましょう。

ステップ4-サービスとしてgnatsdを実行する

システムの起動時に gnatsdを起動し、クラッシュした場合は再起動する必要があります。この問題に対処するために* systemd *を使用します。

[ systemd](https://www.freedesktop.org/wiki/Software/systemd/)は、Linuxシステムのサービスマネージャーです。起動時にサービスを開始し、必要に応じてサービスを再起動し、システムのシャットダウン時に制御された方法でサービスを停止する責任があります。

NATSサービスをいつどのように開始するかを定義するために、サービス構成を作成する必要があります。ユーザーが作成したサービスファイルは / etc / systemd / systemに存在するため、ファイル / etc / systemd / system / nats.serviceを作成します。

sudo nano /etc/systemd/system/nats.service

ファイルに次のスクリプトを配置して、 gnatsdの開始方法を定義します。

[ Unit]
Description=NATS messaging server
​
[ Service]
ExecStart=/srv/nats/bin/gnatsd -c /srv/nats/gnatsd.config
User=nats
Restart=on-failure
​
[ Install]
WantedBy=multi-user.target

サービスの説明を配置したら、次のコマンドでサービスを開始できます。

sudo systemctl start nats

PINGメッセージを送信して、 gnatsdが実行されていることを確認しましょう。

printf "PING\r\n"| nc 127.0.0.14222

ncを使用して gnatsdと通信しました。 ncは、TCPまたはUDPサーバーと通信するためのコマンドラインユーティリティです。使用したコマンドは、次のような出力を出力します。

INFO {"server_id":"Os7xI5uGlYFJfLlfo1vHox","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":false,"ssl_required":false,"tls_required":false,"tls_verify":false,"max_payload":1048576}
PONG

PONGへの応答により、サーバーが期待どおりにリッスンして動作していることがわかります。 NATSサーバーを起動時に起動するには、最後のコマンドを実行する必要があります。

sudo systemctl enable nats

次の出力が表示され、サービスがインストールされていることが確認されます。

OutputCreated symlink from/etc/systemd/system/multi-user.target.wants/nats.service to /etc/systemd/system/nats.service.

gnatsdをサービスとして実行するように正常に構成しました。それを保護し、外部クライアントがアクセスできるようにします。

ステップ5-NATSサービスとの接続を保護します

使用するすべてのパブリッシャーとサブスクライバー gnatsdが同じサーバー上で実行されている場合、それを完了と呼んで先に進むことができますが、これは今ではめったに起こりません。外部クライアント gnatsdが安全な方法でメッセージに接続して公開できるようにする必要があります。

gnatsdはTLS送信をサポートしているため、これを使用して gnatsdNATSクライアント間の通信を保護します。

まず、証明書が必要です。商用証明書を購入するか、[Let's Encrypt](http://letsencrypt.org/)から商用証明書を取得するか、自己署名証明書を生成できます。証明書の取得はこの記事の範囲を超えているため、後者の方法を使用します。

証明書を一時的に保存するディレクトリを作成します。

mkdir ~/priv

次に、次のコマンドを使用して、自己署名証明書を作成します。

openssl req -x509 -nodes -days 3650-newkey rsa:2048 \
 - keyout priv/gnatsd.key -out priv/gnatsd.crt \
 - subj "/C=US/ST=Texas/L=Austin/O=AwesomeThings/CN=www.example.com"

このコマンドは、有効期間が10年の2048ビットRSA証明書を作成します。この記事では gnatsdサーバーのTLS検証を有効にしないため、任意のドメイン名を使用したことに注意してください。

これで、これらのファイル gnatsd.key gnatsd.crt〜/ privディレクトリにあるはずです。これらのファイルを / srv / nats /ディレクトリ構造に移動して、すべてが1か所にあるようにします。次のコマンドを実行します。

sudo mv ~/priv /srv/nats

これで、 natsユーザーとグループのみが / srv / nats / privにアクセスできます。

sudo chmod 440/srv/nats/priv/*
sudo chmod 550 /srv/nats/priv
sudo chown -R nats:nats /srv/nats/priv

ここで、 / srv / nats / gnatsd.configを更新して、作成したばかりの証明書とキーを含めます。構成ファイルを再度開きます。

sudo nano /srv/nats/gnatsd.config

そして、次のセクションを追加して、 gnatsdに証明書とキーを使用するように指示します。

...
​
tls {
 cert_file:"/srv/nats/priv/gnatsd.crt"
 key_file:"/srv/nats/priv/gnatsd.key"
 timeout:1}

ファイルを保存して、エディターを終了します。次に、サービスを再起動して、変更を取得できるようにします。

sudo systemctl restart nats

証明書が有効かどうかをテストしてみましょう。次のコマンドを実行します。

printf "PING\r\n"| nc localhost 4222

今回、コマンドは次のメッセージを出力します。

INFO {"server_id":"npkIPrCE5Kp8O3v1EfV8dz","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":false,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}-ERR 'Secure Connection - TLS Required'

サーバーはメッセージ -ERR'Secure Connection-TLS Required'を返し、新しい構成を受信し、セキュア接続が必要であることを確認しますが、 ncは操作方法を認識していません。

完全なNATSクライアントをインストールせずにNATSサービスと通信できるようにするために、* catnats *と呼ばれるツールを使用します。最初にダウンロードしましょう:

wget https://github.com/yuce/catnats/raw/0.1.2/catnats.py

そしてそれを実行可能にします:

chmod +x catnats.py

最後に、 catnats.py / srv / nats / binフォルダーに移動し、名前を catnatsに変更します。

sudo mv catnats.py /srv/nats/bin/catnats

catnatsは、 PINGの前に送信されたのと同じメッセージを送信して、NATSサービスを使用して通信できるかどうかを確認しましょう。

printf "PING\r\n"|/srv/nats/bin/catnats --addr 127.0.0.1:4222

接続が安全であることを示す次の出力が表示されます。

INFO {"server_id":"npkIPrCE5Kp8O3v1EfV8dz","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":false,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}
PONG

通信を保護したので、認証を有効にして、NATSに接続するためにユーザー名とパスワードが必要になるようにします。

ステップ6-ID検証が必要

NATSサービスは、デフォルトでは認証を必要としません。これは、サービスがプライベートネットワークでのみアクセスできる場合は問題ありませんが、NATSサービスにインターネットでアクセスできるようにする必要があるため、認証を有効にする必要があります。 gnatsdはユーザー名とパスワードの認証をサポートしており、簡単に有効にできます。

/ srv / nats / gnatsd.configファイルを開きます。

sudo nano /srv/nats/gnatsd.config

資格情報を指定する新しい authorizationセクションを追加します。このチュートリアルでは、ユーザー名 user1とパスワード pass1を使用します。実稼働環境では、より長く、より複雑なパスワードを使用する必要があります。

...

authorization {
 user: user1
 password: pass1
}

ファイルを保存してから、 / srv / nats / gnatsd.configの所有者を natsに変更し、このユーザーが読み取れるようにして、システム上の他のユーザーのユーザー名とパスワードを保護します。

sudo chown nats /srv/nats/gnatsd.config
sudo chmod 400/srv/nats/gnatsd.config

次に、変更を有効にするためにサービスを再起動します。

sudo systemctl restart nats

PINGメッセージを gnatsdに送信して、すべてが正常かどうかを確認しましょう。もう一度、 catnatsを使用してメッセージを送信します。

printf "PING\r\n"|/srv/nats/bin/catnats --addr 127.0.0.1:4222

次の出力が表示されます。

NFO {"server_id":"sY0SSJBNbEw53HxzS9mH1t","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":true,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}-ERR 'Authorization Violation'

これは、変更が正常に適用されたことを示しています。サービスに接続するには、正しいユーザー名とパスワードを送信する必要があります。今度はユーザー名 user1とパスワード pass1を指定して、もう一度試してみましょう。

printf "PING\r\n"|/srv/nats/bin/catnats --addr 127.0.0.1:4222--user user1 --pass pass1

以下の出力からわかるように、今回は機能しました。

INFO {"server_id":"sY0SSJBNbEw53HxzS9mH1t","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":true,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}+OK
PONG

このサービスをユーザー名とパスワードを知っているクライアントに制限したので、外部クライアントが接続できるようにサービスを再構成できます。

ステップ7-サービスを世界に公開

ローカルインターフェイスである 127.0.0.1をリッスンするようにNATSサーバーを構成しました。 0.0.0.0を聞かせれば、世界中で使えるようになります。 / srv / nats / gnatsd.configの最後の更新:

sudo nano /srv/nats/gnatsd.config

次に、 net設定に関連付けられているIPアドレスを変更します。

...
net:'0.0.0.0'...

ファイルを保存して、サービスを再起動します。

sudo systemctl restart nats

これで、NATSサービスは外部クライアント接続の準備ができました。使用方法を学ぶために、NATSサーバーをメッセージブローカーとして使用する簡単な監視サービスを作成しましょう。

手順8-(オプション)サーバーの過負荷通知を構成する

このセクションでは、NATSサービスを使用して簡単な過負荷監視システムを作成します。システムはサーバーの平均負荷を受け取り、サーバーが過負荷になると管理者に電子メールを送信します。

サンプルプロジェクトには、次のコンポーネントが含まれます。

簡単にするために、これらすべてのコンポーネントを同じサーバーで実行しますが、このチュートリアルを完了した後、各コンポーネントを異なるサーバーで実行してみることができます。

モニターのセットアップ

Linuxシステム / proc / loadavgの平均負荷をそこから読み取ることができます。このプロジェクトでは、出力の最初のフィールドである直前の負荷平均のみに関心があります。次のコマンドを使用して値を取得します。

cat /proc/loadavg | cut -f1 -d" "

次の出力が表示されます。

0.11

/ proc / loadavgを読み取って得られる平均負荷はプロセッサの数に依存するため、平均負荷をプロセッサの数で割って正規化する必要があります。次のコマンドを使用して、サーバー内のプロセッサーの数を取得できます。

getconf _NPROCESSORS_ONLN

ターミナルに結果が表示されます。

1

サーバーのデフォルトシェルは浮動小数点演算を処理できないため、メッセージのペイロードとして負荷平均、プロセッサ数、およびホスト名を送信し、後で通知プログラムで分割します。これは、ペイロードを作成するために使用するコマンドです。

echo $(hostname)`cat /proc/loadavg | cut -f1 -d" "``getconf _NPROCESSORS_ONLN`

このコマンドは、ホスト名、平均負荷、およびプロセッサ数をそれぞれ表示します。

your_hostname 0.281

ホスト名 stats.loadaverageを使用して負荷平均とプロセッサ数をNATSサーバーに公開するシェルスクリプトを作成しましょう。このスクリプトを定期的に実行するようにシステムを構成します。 〜/ publish_load_average.shという名前の新しいファイルを作成します。

nano ~/publish_load_average.sh

ファイルに、次のスクリプトを追加します。

NATS_ADDR=127.0.0.1:4222
LOADAVG=$(cat /proc/loadavg | cut -f1 -d" ")
NPROC=$(getconf _NPROCESSORS_ONLN)
SUBJECT="stats.loadaverage"
PAYLOAD=$(echo $(hostname) $LOADAVG $NPROC)
MESSAGE="PUB $SUBJECT ${#PAYLOAD}\r\n${PAYLOAD}\r\n"
printf "$MESSAGE"|/srv/nats/bin/catnats -q --raw --addr $NATS_ADDR --user user1 --pass pass1

このスクリプトはメッセージを作成してから、そのメッセージを catnatsに配信し、 catnatsはメッセージをNATSサービスに公開します。 catnats -qスイッチで実行され、出力を抑制します。 --rawスイッチを使用するため、 catnatsは入力を解釈しようとしません。 $ NATS_ADDR NATSサービスが別のサーバーにある場合は、変数の値を変更できます。

スクリプトをテストして、負荷平均をNATSに送信してみましょう。

次のコマンドは、5秒ごとに 〜/ publish_load_average.shを実行します。 行の終わりにある文字を使用して、バックグラウンドでコマンドを実行することに注意してください。

whiletrue;do sh ~/publish_load_average.sh; sleep 5; done &

コマンドがプロセスIDでバックグラウンドで実行されていることを示す出力が表示されます。

[1]14123

:後でコマンドを停止するためにそのIDを使用する必要があるため、プロセスIDをどこかに書き留めます。

次に、NATSに接続し、トピック stats.loadaverageをサブスクライブして、負荷平均を取得します。

printf "SUB stats.loadaverage 0\r\n"|/srv/nats/bin/catnats --raw --no-exit --pong --user user1 --pass pass1

--no-exitフラグを使用して自動終了を無効にし、 --pongを使用してNATSとの接続をアクティブに保ちます。すべてが正しければ、次のような出力が得られ、5秒ごとに更新されます。

INFO {"server_id":"A8qJc7mdTy8AWBRhPWACzW","version":"0.8.1","go":"go1.6.2","host":"0.0.0.0","port":4222,"auth_required":true,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}+OK
+ OK
MSG stats.loadaverage 027
your_hostname 0.081

CTRL + Cを押して catnatsを終了します。 publish_load_average.shを実行するためのより良い方法があるので、 publish_load_average.shループの呼び出しを停止しましょう。

kill 14123

採用した方法はテストに非常に適していますが、永続的に使用したい方法ではありません。システムが毎分 publish_load_average.shを実行できるようにする必要があります。これを実現するために、* crontab *エントリを追加できます。 Linuxシステムは cronを使用します。これは、指定したスケジュールに従ってコマンドまたは「ジョブ」を実行できるシステムです。 crontabコマンドを使用すると、これらのジョブを管理できます。

新しいエントリを作成するには、次のコマンドを実行します。

crontab -e

上記のコマンドを実行したことがない場合は、エントリを管理するテキストエディタを選択するように求める次のプロンプトが表示される場合があります。

no crontab for demo - using an empty one

Select an editor.  To change later, run 'select-editor'.1./bin/ed
 2. /bin/nano        <---- easiest
 3. /usr/bin/vim.basic
 4. /usr/bin/vim.tiny

Choose 1-4[2]:

使い慣れたエディタに対応する番号を入力し、「ENTER」を押してください。選択したエディターにファイルが表示されます。

開いたファイルの最後に次の行を追加しますが、次の行を使用した場合は、ユーザー名 sammyを置き換えてください。

* /1**** bash /home/sammy/publish_load_average.sh

上記のエントリは、 cron publish_load_average.shスクリプトを毎分実行することを伝えています。ファイルを保存して、エディターを閉じます。

次に、負荷平均の定期的なリリースが効果的かどうかをテストしましょう。

printf "SUB stats.loadaverage 0\r\n"|/srv/nats/bin/catnats --raw --no-exit --pong --user user1 --pass pass1

数分待つと、表示される出力は次のようになります。

INFO {"server_id":"A8qJc7mdTy8AWBRhPWACzW","version":"0.8.1","go":"go1.6.2","host":"0.0.0.0","port":4222,"auth_required":true,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}+OK
+ OK
MSG stats.loadaverage 027
your_hostname 0.011
MSG stats.loadaverage 027
your_hostname 0.001

CTRL + Cを押して catnatsを終了します。

モニターのセットアップに成功し、NATSサーバーにメッセージを送信しています。次に、このデータを使用する通知プログラムを設定します。

通知プログラムを作成する

NATSサービスに接続し、 stats.loadaverageメッセージをリッスンする通知プログラムを作成しましょう。プログラムがメッセージを受信するたびに、各プロセッサの平均負荷が計算されます。プロセッサあたりのCPU使用率が0.6または60%を超える場合、メッセージを公開しているホストに警告フラグを設定し、事前定義されたアドレスに電子メールを送信します。各プロセッサの平均負荷が0.4未満の場合、ホストの警告フラグがクリアされます。受信トレイがいっぱいになるのを防ぐため、警告フラグが設定されたときにメールを送信します。

Node.jsには優れたNATSクライアントがあるため、Node.JSを使用して通知プログラムを作成します。したがって、最初にNode.jsをインストールします。

sudo apt-get install -y npm

次に、通知プログラム用のディレクトリを作成し、そのディレクトリに切り替えます。

mkdir ~/overload_notifier && cd ~/overload_notifier

Node.jsプロジェクトは、プロジェクトとその依存関係に関する情報を含む package.jsonというファイルを使用します。次のコマンドを実行してファイルを作成します。

npm init -y

次に、Node.js用のNATSクライアントと、このプロジェクトで警告メールを送信するために使用する nodemailerモジュールをインストールします。

npm install [email protected] [email protected]

これで、通知プログラムを作成できます。ファイル notifier.jsを作成します。

nano notifier.js

次に、次のコードをファイルに追加します。

var NATS_URL ='nats://127.0.0.1:4222';var NATS_USER ='user1';var NATS_PASS ='pass1';var EMAIL_TO ='[email protected]';

これらのオプションは、NATSサービスのユーザー名とパスワード、および電子メールアドレスと一致するように必ず変更してください。

次に、次のコードを追加してNode.js NATSクライアントをインポートし、 gnatsdサービスに接続します。

var tlsOptions ={
 rejectUnauthorized:false,};var nats =require('nats').connect({url: NATS_URL,
         tls: tlsOptions,
         user: NATS_USER,
         pass: NATS_PASS});

次に、このコードを追加してメールプログラムを設定し、メールを送信するSMTPサーバーに接続します。このサーバーはまもなくセットアップされます。

var nodemailer =require('nodemailer');var transport = nodemailer.createTransport('smtp://localhost:2525');

次に、残りのコードを追加して負荷平均を計算し、通知メールを送信する必要があるかどうかを判断します。

// keep the state of warnings for each hostvar warnings ={};
​
functionsendEmail(subject, text){
 transport.sendMail({
  to: EMAIL_TO,
  subject: subject,
  text: text
    });}
​
functionprocessMessage(message){// message fields: host load processor_countvar fields = message.split(" ");var host = fields[0];var loadAverage =parseFloat(fields[1])/parseInt(fields[2]);if(loadAverage >0.6){if(!warnings[host]){// send warning email if one wasn't already sentvar res =sendEmail('Warning! Server is Overloaded: '+ host,'Load average: '+ loadAverage);// set warning for the host
   warnings[host]=true;}}elseif(loadAverage <0.4){if(warnings[host]){// clear the warning
   warnings[host]=false;}}}
​
nats.subscribe('stats.loadaverage', processMessage);

メッセージをサブスクライブし、メッセージを受信するたびに、送信したペイロードを解析して平均負荷を決定する processMessage関数を実行します。高すぎる場合は、メッセージを送信し、ホスト名に基づいてフラグを設定することにより、以前にメッセージを送信したことがあるかどうかを追跡します。このようにして、ホストごとに通知を追跡できます。負荷平均がしきい値を下回っている場合は、フラグをクリアします。

監視および通知プログラムを使用して、サンプルプロジェクトをテストできます。

テスト項目

試してみよう。人工的な負荷を生成し、負荷が高すぎる場合に通知者が警告メールを送信するかどうかを確認します。

ストレスツールをインストールして、サーバーにCPU負荷を生成しましょう。

sudo apt-get install -y stress

次に、通知プログラムからのメッセージを投稿するようにSMTPサーバーを設定する必要があります。このテストでは、完全なSMTPサーバーをインストールして構成するのはやり過ぎなので、実際に送信するのではなく、配信された電子メールのみを表示する単純なSMTPサーバーを使用します。 Pythonプログラミング言語には、ロードできる DebuggingServerモジュールがあり、受信した電子メールは破棄されますが、動作することを確認できるように画面に表示されます。 PythonはすでにUbuntuサーバーにインストールされているため、これは完璧なソリューションです。

SMTPサーバーをバックグラウンドで起動してデバッグします。 notifier.jsコードで設定したSMTPアドレスと一致する localhostポート 2525でリッスンします。次のコマンドを実行して、SMTPサーバーを起動します。

python -m smtpd -n -c DebuggingServer localhost:2525&

次に、次のコマンドを使用して、通知プログラムをバックグラウンドで開始します。

nodejs ~/overload_notifier/notifier.js &

最後に、サーバーのすべてのプロセッサに負荷をかけましょう。次のオプションを指定して stressコマンドを実行します。

stress --cpu $(getconf _NPROCESSORS_ONLN)

数分後、SMTPサーバーが通知機能によって送信されたメッセージの表示を開始するため、次のような出力が表示されます。

- - - - - - - - - - MESSAGE FOLLOWS ----------
Content-Type: text/plain
To: [email protected]
Subject: Warning! Server is Overloaded: your_hostname
Message-Id:<1466354822129-04c5d944-0d19670b-780eee12@localhost>
X-Mailer:nodemailer(2.4.2;+http://nodemailer.com/;
 SMTP/2.5.0[client:2.5.0])
Content-Transfer-Encoding: 7bit
Date: Sun,19 Jun 201616:47:02+0000
MIME-Version:1.0
X-Peer:127.0.0.1

Load average:0.88------------ END MESSAGE ------------

これにより、サーバーの負荷が高すぎる場合にメールが正常に送信されたことが通知されます。

CTRL + Cを押して、負荷の生成を停止します。サンプルプロジェクトが完了しました。これで、自分の環境で作業する方法を理解する必要があります。

結論として ##

この記事では、NATS PubSubメッセージングシステムについて学び、安全な方法でサービスとしてインストールし、サンプルプロジェクトでテストしました。サンプルプロジェクトはNode.JSクライアントを使用していますが、NATSにはより多くの言語とフレームワークを備えたクライアントがあり、[NATSダウンロードページ](http://nats.io/download)で見つけることができます。 NATSの詳細については、[公式ドキュメント](http://nats.io/documentation/)を参照してください。

その他のUbuntuチュートリアルについては、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。

参照:「Ubuntu16.04にNATSをインストールして構成する方法」

Recommended Posts

Ubuntu16.04にNATSをインストールして構成する方法
Ubuntu18.04にGogsをインストールして構成する方法
Ubuntu18.04にCyberpanelをインストールして構成する方法
Ubuntu16.04にownCloudをインストールして構成する方法
Ubuntu16.04にownCloudをインストールして構成する方法
Ubuntu18.04にGitLabをインストールして構成する方法
Ubuntu18.04にAnsibleをインストールして構成する方法
Ubuntu16.04にElasticsearchをインストールして構成する方法
Ubuntu14.04にPostGISをインストールして構成する方法
Ubuntu18.04にVNCをインストールして構成する方法
Ubuntu16.04にSphinxをインストールして構成する方法
Ubuntu14.04にOrientDBをインストールして構成する方法
Ubuntu12.04にAppScaleをインストールして構成する方法
Ubuntu14.04にPostGISをインストールして構成する方法
Ubuntu 16.04 /18.04にPycharmとIpythonをインストールする方法
CentOS7にElasticsearchをインストールして構成する方法
Ubuntu16.04にphpMyAdminをインストールして保護する方法
Ubuntu20.04にDockerをインストールして使用する方法
CentOS8にVNCをインストールして構成する方法
Ubuntu18.04にCurlをインストールして使用する方法
Ubuntu18.04にComposerをインストールして使用する方法
Ubuntu18.04にWineをインストールして使用する方法
Ubuntu16.04にphpMyAdminをインストールして保護する方法
CentOS8にRedisをインストールして構成する方法
Ubuntu20.04にComposerをインストールして使用する方法
Ubuntu14.04にBaasBoxをインストールして使用する方法
Ubuntu16.04にPostgreSQLをインストールして使用する方法
CentOS6にphpMyAdminをインストールして構成する方法
CentOS8にOwncloudをインストールして構成する方法
Ubuntu16.04にDockerをインストールして使用する方法
CentOS8にRedmineをインストールして構成する方法
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
UbuntuにMySQLをインストールして構成する
Ubuntu20.04にVagrantをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu18.04にAnaconda3をインストールする方法
Ubuntu18.04にMemcachedをインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu14.04にMailpileをインストールする方法
Ubuntu16.04にPrestaShopをインストールする方法
Ubuntu20.04にSkypeをインストールする方法
Ubuntu20.04にJenkinsをインストールする方法
Ubuntu18.04にPython3.8をインストールする方法
Ubuntu18.04にKVMをインストールする方法
Ubuntu20.04にKVMをインストールする方法