LoginSignup
10
11

More than 5 years have passed since last update.

PM2から実行中のワーカーの情報を取得する(サンプルとしてnode.js各ワーカーのメモリを取得)

Last updated at Posted at 2014-07-01

PM2に登録するプログラムに監視用のコマンドを仕込む

pm2app.js
var monitor_init = function(){
    if (!('send' in process)) {return;}
    process.on("message", function (msg) {
        if ( "type" in msg ) {
            switch(msg.type){
            case "process.getinfo":
                process.send({type:msg.type, memory:process.memoryUsage()});
                break;
            default:
                break;
            }
        }
    });
}
var main = function(){
    monitor_init();
    var update = function(){
        setTimeout(update, 1000);
    }
    update();
}
main();

pm2にワーカーを登録する

start.sh
pm2 start pm2app.js -i 2 --name worker

データ取得用のコマンドの作成

モジュールをnpmでインストールする

npm install pm2-interface@0.1.3

ワーカーの情報取得用コマンドを作成する

pm2-monitor.js
#!/usr/bin/env node
var ipm2 = require('pm2-interface')()
var os = require('os');

ipm2.on('ready', function() {
    ipm2.bus.on('process.getinfo', function(worker){
        console.log({
            name : os.hostname()+'.'+worker.process.pm2_env.pm_id,
            data : worker.data.memory
        });
    });
    var msg = {type:"process.getinfo"};
    ipm2.rpc.msgProcess({name:"worker", msg:msg}, function (err, res) {
        setTimeout(function(){
            ipm2.disconnect();
        }, 100);
    });
});

ipm2.disconnectを実行しない限りずっとモニタリングすることもできる(pm2に登録してpubsubやfluentdに流すこともできる)

cronなどでポーリングする場合に癖があってipm2.rpc.msgProcessのコールバックではコマンドを発行したコールバックで
リクエストに対するレスポンスを受け取ることはできない。
なのでsetTimeoutで処理を遅らせている(値が取れないことを考慮したほうがいいかも)

※他にやり方があれば教えて下さい

結果

console
{name: "mymachine.2", data: { rss: 19156992, heapTotal: 11356928, heapUsed: 5831840 } }
{name: "mymachine.3", data: { rss: 19156992, heapTotal: 11356928, heapUsed: 5831840 } }

おまけ

npm install munin-plugin

モジュールのexample内にworkerのメモリを取得するmuninのプラグインが入ってます

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11