よちよち歩きのITエンジニアのメモ

Web技術など学んだ内容をメモしておくブログです。どんなにちっちゃくてもいいから、 一歩、ほんの小さな一歩でも夢や目標に近づくように頑張ります

【Node.js】PM2&keymetricsについてのメモ

会社のプロジェクトで、Node.jsを使うことになったので、
本番環境での運用、監視ツールとしてPM2導入の検討するためのメモ

概要

PM2・・・プロセス管理、デーモン化(オープンソース)
`Advanced, production process manager for Node.js`
http://pm2.keymetrics.io/

keymetrics・・・PM2のWeb管理、監視ツール
`Monitoring Reliability, Performance and Errors For Node.js Applications`
https://keymetrics.io/
・複数のPM2の統計データをモニタリングすることが可能
・Web上からマニュアルで再起動も可能
・Gitでのデプロイも可能

導入したい理由

(1) Express.jsのページで紹介されていること

Express アプリケーションを実動で実行する際、以下のタスクを実行するためにプロセス・マネージャー を使用すると便利です。

・アプリケーションが異常終了した場合に自動的に再始動する。
・ランタイム・パフォーマンスとリソース使用量に関するインサイトを得る。
・パフォーマンスを向上させるために設定を動的に変更する。
・クラスタリングを制御する。

Express およびその他の Node.js アプリケーション用の最も一般的なプロセス・マネージャーは次のとおりです。

・StrongLoop Process Manager
・PM2
・Forever

http://expressjs.com/ja/advanced/pm.html
より引用

(2) 有名企業での採用実績が豊富なので信頼性に期待ができる

http://pm2.keymetrics.io/users/

機能

PM2
  • プロセスのデーモン化
    • バックグラウンドで実行
  • ログ収集
    • エラーログの収集
  • クラスタリングと再起動
    • 2プロセスが起動されて、通常は1プロセスで実行されるが、障害がおきると、もう一つのプロセスに自動で切り替わって、その間に障害のあったプロセスを自動で再起動してくれる
  • 動作設定--
    • PM2で管理するプロセスについて、細かな設定が可能です。設定は、JavaScript形式、JSON形式、YAML形式をサポートします。
  • PaaS 互換
    • PM2のAPIを利用することで、さまざまなPaaS(Heroku/Google App Engine/Azure)上から、PM2との連携が可能です。
  • 監視とリロード
    • アプリケーションのファイルやディレクトリの変更を検知して、自動的にアプリケーションを再起動できます。
  • ログ管理
    • リアルタイムログの確認や、JSON形式での情報取得、ログローテーションなどが利用できます。
  • モニタリング
    • プロセスごとのCPU/メモリ使用率、メタデータ、グローバルログの確認ができます。
  • 最大メモリ制限
    • 設定した上限メモリ値を超えたプロセスを自動で再起動させることが可能です。
  • クラスタモード
    • Node.jsアプリケーションプロセスを全CPU、全CPU - 1、特定CPUに割り当てたりすることが可能です。
  • ホットリロード
    • reloadコマンドにより、プロセスのダウンタイム0秒を実現できます。
  • 開発者モード
    • 開発者向けに開発モード(ファイルの変更に応じたリスタートに対応など)でアプリケーションを起動させることが可能です。
  • 起動スクリプト
    • 起動システム(systemd、upstart、launched、rcd、systemv)に応じた起動スクリプトが提供されます。

http://openstandia.jp/oss_info/pm2/
より抜粋

Keymetrics
  • モニタリング

- Keymetricsと連携させることにより、複数のPM2の統計データをモニタリングすることが可能になります。

  • Git連携

- git と連携したデプロイが可能です。

foreverとの比較

nodejs用だと、foreverとPM2が有名だが、Keymetricsなど本番運用を想定したWebツールを利用することができない。

コマンド


## 通常
$ pm2 start app.js

## 開発モード
$ pm2 start app.js --watch


## リアルタイムモニター
$ pm2 monit


## 各種リンク