cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平(@inokara)です。
今回も Sensu と Uchiwa のネタですので、ちょっと癒やし的な意味を込めて扇子とうちわの画像を。
はじめに
Sensu の直近でイケてるなあと思っている uchiwa というダッシュボードですが、nodejs で動作しているのですがデーモン化しないとサーバー再起動時等に手動で起動せにゃあかん状況です。これではちょっち残念なので同僚に教えて頂いた pm2 という node.js のアプリケーションをお手軽にデーモン化してくれるツールでデーモン化してみたいと思います。
pm2 とは
まずはググらビリティ
Sensu や Uchiwa 同様に pm2 もググらビリティ悪すぎは否めません…
気を取り直して…pm2 とは
こちらを参考に…以下のような特徴があります。
- node.js アプリを負荷分散管理するパッケージ
- ロードバランサ機能
- デーモンスクリプト
- 不安定なプロセスを停止させる機能
などなど。こちらの記事等を拝見させて頂くとだいぶんイケたツールのようですのでかなり楽しみですね。
uchiwa を使う
事前準備
uchiwa は node.js で動作するので nodejs とその関連パッケージをインストールしておきましょう。
rpm --import http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6 rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y install git yum -y install --enablerepo epel nodejs npm
今回も AWS の EC2 インスタンス上に構築した CentOS を利用します。
uchiwa のセットアップ
uchiwa は git clone してきて config.js を修正し npm コマンドで関連パッケージをインストールするだけ。
cd /opt git clone https://github.com/palourde/uchiwa.git cd /opt/uchiwa cp config.js.example config.js cat << EOT > config.js module.exports = { sensu: [ { name: 'API 1', host: 'Sensu API hostname', ssl: false, port: 4567, user: '', pass: '', path: '', timeout: 5000 } ], uchiwa: { user: 'uchiwa', pass: 'aoide', stats: 10, refresh: 10000 } } EOT npm install
uchiwa をあおぎましょう
以下のように node コマンドを利用してアプリケーションを立ち上げます。
node app.js
実行するとフォアグランドで uchiwa が起動します。ま、とにかく簡単ですね。
残念ながら Ctrl+c で止めなければいけなかったり、端末閉じたりすると uchiwa が落ちたりと使い勝手がよくなさそうです。
そこでpm2
pm2 をインストール
以下のように npm コマンドを利用してインストールします。
npm install pm2@latest -g
簡単ですね。
早速 uchiwa を起動してみましょう
以下のようにアプリケーション名を指定して pm2 経由で uchiwa を起動してみましょう。
pm2 start app.js --name uchiwa
以下のように出力されて uchiwa が起動します。
ちゃんと uchiwa が起動しているか一応確認しましょう。
おお。
pm2 の機能を見てみる
こちらを見ながら pm2 の機能の一部(個人的にチョイス)を見てみたいと思います。
pm2 list
pm2 で管理しているプロセスの一覧を確認することが出来ます。
pm2 desc${id}
id を指定するとプロセスの詳細を確認することが出来ます。
pm2 monit
アスキーアートで各プロセスのリソース利用状況が確認出来ます。
pm2 monit
実行すると以下のように表示されます。
Ctrl+c で終了します。
pm2 logs
管理しているアプリケーションプロセスのログを確認することが出来ます。
Ctrl+c で終了します。
pm2 stop
stop コマンドは以下のように使います。
pm2 stop all
管理している全てのアプリケーションプロセスを停止します。また、以下のように id を指定して個別のアプリケーションプロセスを停止します。
pm2 stop ${id}
pm2 delete
delete コマンドは pm2 の管理からアプリケーションプロセスを削除します。stop と同様に all を指定すると全てのアプリケーションプロセスが対象となり、id を指定するとで個別のアプリケーションプロセスを削除することが出来ます。
pm2 delete all
または
pm2 delete ${id}
pm2 restart
restart は管理されているアプリケーションプロセスを再起動します。stop や delete 同様に all または個別の id が指定可能です。
pm2 restart all
または
pm2 restart ${id}
pm2 startup centos
startup は CentOS または ubuntu 用のスタートアップスクリプトを作成してくれます。ファンタスティック。
pm2 startup centos
実行すると以下のように表示されます。
この状態から /etc/init.d/pm2-init.sh stop や /etc/init.d/pm2-init.sh start で pm2 自身のプロセスの管理が出来るようになります。ちなみに、uchiwa を自動起動させたい場合には以下のように設定するとよろしく出来そうです。
- pm2 startup centos
- /etc/init.d/pm2-init.sh start
- cd /etc/opt/ && pm2 start app.js
これで、再起動時にも uchiwa が起動してくれますし、pm2 コマンドで管理することが出来ます。尚、自動起動させたくない場合には pm2 delete で pm2 管理下から外してあげれば自動起動はしなくなります。
pm2 web
ちょっとした Web 管理インターフェースを備えているようです。以下のように実行すると…
pm2 web
以下のように表示されます。Web 管理インターフェースは 9615 ポートで Listen します。
ブラウザでアクセスすると以下のように JSON フォーマットの出力が得られます。
尚、この Web 管理インターフェースを停止する場合には以下のように stop コマンドの引数として id を指定します。
pm2 stop 3
祝・デーモン化
以下の状態から再起動してみましょう。
再起動、それは魔法の言葉。
shutdown -r now
再起動しました。
しばし待ってから改めてインスタンスにアクセス。
ちゃんとアプリケーションも起動しているようです。一応、uchiwa も確認。
素晴らしい。
おまけ(とするには勿体無い)
pm2 の実力
pm2 は node.js で書かれたアプリケーション以外も管理出来るというなんとも驚きのツールです…。こちらを見ると python や Ruby なんでも来い状態です。但し、何かしらの制限事項はあると思いますのでそのあたりについて引き続き調べてみたいと思います。
bash Web サーバーを pm2 で管理するデモ
bash の Web サーバー
nc コマンドを駆使することで、たった一行の bash スクリプトで Web サーバーが実装可能です。
while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; cat index.html; } | nc -l 8080; done
凄いですね。これを以下のようなスクリプトにしてしまいます。
cat << EOT > bash-web.sh #!/usr/bin/env bash while true; do { echo -e 'HTTP/1.1 200 OKrn'; cat index.html; } | nc -l 8080; done EOT chmod 755 bash-web.sh
合わせてカレントディレクトリに index.html を作成します。
cat << EOT > index.html hoge EOT
pm2 で管理出来るようにする
以下のように pm2 経由で起動するようにしてみます。
pm2 add bash-web.sh
以下のように表示されました。
ブラウザでアクセスしてみたいと思います。
ログも pm2 経由で確認が出来ます。
pm2 logs
以下のように表示されます。
一応、pm2 経由で bash で書いたプロセスが管理されているようです。但し、実際に触っていると pm2 側でアプリケーションプロセスを delete しても勝手にアプリケーションプロセスが上がってきたりする挙動が見られたので、実際に利用する場合はアプリケーションのプロセス管理等は工夫をする必要があるかもしれません。
まとめ
今回やったこと
- uchiwa を pm2 というツールを使ってデーモン化した
- pm2 で Bash で書いた簡単 Web サーバーもデーモン化出来た
一言
- pm2 素敵!
- ちなみに他のアプリケーションも pm2 から管理出来るのも面白い
元記事はこちら