masalibの日記

システム開発、運用と猫の写真ブログです

Node.jsをPM25(pm2)でデーモン化する

foreverのモジュールでデーモン化する事ができたのですが
ログの調査をしているとPM2(P(rocess) M(anager))が簡単にローテーションできるという事をしった
またプロセス管理(CPUやメモリ)などを見れるのでパフォーマンステスト時にいいかと思いpm25に切り替えてみました

pm25という名前だったけど今はpm2になっている

masalib.hatenablog.com

テストアプリは前回と同様に
express-generatorで作成したexpressです
パスは/var/node/myapp/になります

インストールと確認

$ npm install pm2 -g

$ which pm2
# /usr/bin/pm 

$ pm2 --version
# Community Editionと表示されてアスキーロゴが表示された
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
2.9.3

f:id:masalib:20180219182424p:plain

pm25(pm2)にテストアプリを登録する

$ pm2 start /var/node/myapp/bin/www

[PM2] Starting /var/node/myapp/bin/www in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ mode │ pid  │ statusrestart │ uptime │ cpu │ mem       │ user │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ www      │ 0  │ fork │ 9671 │ online │ 0       │ 0s     │ 1%  │ 10.3 MB   │ root │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

CPUやメモリが表示されていていい感じ~♪

$ pm2 starlist

で上記の表が表示される

pm25(pm2)にテストアプリをストップと削除

$ pm2 stop /var/node/myapp/bin/www

statusがstoppedになっている事が確認できた
f:id:masalib:20180219182608p:plain

リストから消す場合はdeleteでおこなう

$ pm2 delete /var/node/myapp/bin/www

pm25(pm2)にテストアプリをリスタート

$ pm2 restart /var/node/myapp/bin/www

foreverと同じでした

pm25(pm2)に設定ファイルでテストアプリを登録する

$ vi /var/node/myapp/pm25config.json

{
  "apps" : [{
    "name"        : "myapp",
    "script"      : "./bin/www",
    "cwd"      : "/var/node/myapp/",
    "watch"       : true,
    "env": {
      "NODE_ENV": "development"
    },
    "env_production" : {
       "NODE_ENV": "production"
    }
  }]
}

設定内容の詳細は以下を参考にした
http://pm2.keymetrics.io/docs/usage/application-declaration/

YAML形式もいけるみたいだけど
「できるだけJSON形式を使用してください」
と記載されているのJSONでいったほうがいいみたい

pm25(pm2)でログローテーション

pm2 install pm2-logrotate

デフォルトでは最大サイズ10MB、一日単位でログが分けられますが
10Mとかすぐに行きそうなので200MBにしたいと思います

pm2 set pm2-logrotate:max_size 200M 

rootでローテーションを実行しているので
/root/.pm2/logsに保存される

詳細は/etc/logrotate.d/pm2-userをみればわかるみたい
qiita.com
日付がたたないとわからないので後で確認する

サーバー起動時に自動的にpm2を自動開始する

pm2 startup [platform]
#centos6の場合:pm25 startup centos6
#centos7の場合:pm25 startup centos

pm2 save

デフォルトがcentos7になっているみたい・・・
centos6のユーザーは注意が必要

pm2で監視


pm2 monit

を実行すると
Now registering to Keymetrics

Username:
Email:
Password:
上記の内容を入力しないといけなかった


調べてみるとkeymetricsというサイトの登録が必要だった

https://keymetrics.io/pricing/
 ↓
https://app.keymetrics.io/api/oauth/register
f:id:masalib:20180219182719p:plain
今回は無料プランでいきます
台数が多くなった場合はプロのプランにするしかないみたい
はてなのMackerelみたいな感じだね

ユーザー登録が完了すると以下のようなページが表示されます
f:id:masalib:20180219182826p:plain

そのコマンドをコピーしてサーバーで実行すると監視サーバーと実行サーバー(クライアント)が接続されます

pm25 link XXXXXX YYYYYY

完了するとURLが表示されているのでそちらに遷移すると
[Monitoring Enabled] Dashboard access: https://app.keymetrics.io/#/r/xxxxxxxxxx

f:id:masalib:20180219183209p:plain


監視の画面が表示された
これで監視ができるのねぇ~便利だね

メールの通知ができるみたいだけど・・・どうやって登録するのかわからん・・・・
もしわかったら通知用のメールアドレスに登録したいできないなら
メーリングリストで登録する形で逃げる

サーバー全体の監視もできるみたい・・・

 pm25 install pm2-server-monit

phpmysqlもできるみたいだけど目的から外れるのでいれない

参考URL

参考にさせていただきました
ありがとうございます

onlineconsultant.jp

blog.morugu.com
qiita.com

Node.js超入門

Node.js超入門