モジュールシステム

PM2モジュール

PM2モジュールとは、PM2によってインストールおよび管理されるスタンドアロンのソフトウェアです。これらのソフトウェアはNPMリポジトリからプルされ、NPM上の一般的なJavascriptライブラリとして公開されます。

誰でもモジュールを作成して公開できます。モジュールは、ログローテーションモジュールスタンドアロンのHTTPプロキシ、ロードバランサー、Node.jsベースのWikipedia、DNSサーバー、またはあらゆる種類のユーティリティにできます。あなたの創造性が限界です!

モジュールの管理

モジュールの管理は簡単です。

# Install
pm2 install <module-name>

# Update a module
pm2 install <module-name>

# Install a module from GitHub (username/repository)
pm2 install pm2-hive/pm2-docker

# Force module restart
pm2 restart <module-name>

# Get more information
pm2 describe <module-name>

# Install a module in dev mode from local folder
pm2 install .

# Generate a module boilerplate
pm2 module:generate <module-name>

# Uninstall module
pm2 uninstall <module-name>

# Publish new module (Inc Semver + Git push + NPM publish)
pm2 publish

モジュールの作成

モジュールのサンプルを生成するには

pm2 module:generate <module-name>

では、このモジュールをPM2で実行してみましょう。

cd <module-name>
pm2 install .

これでソースを編集でき、変更を加えると、PM2がモジュールを自動的に再起動します(watchオプションが有効)。

モジュールログを表示するには

pm2 logs <module-name>

モジュールを削除するには

pm2 uninstall <module-name>

package.jsonの補足

package.jsonファイルに補足情報を追加できます。

config属性の下に設定値を定義したり、一般的なpm2管理プロセスのようにモジュールの動作を定義したりできます。

{
  "name": "pm2-logrotate",  // Used as the module name
  "version": "1.0.0",       // Used as the module version
  "description": "my desc", // Used as the module comment
  "dependencies": {
    "pmx": "latest"
  },
  "config": {              // Default configuration values
                           // These values can be overridden with `pm2 set <module-name>:<attr> <val>`
     "days_interval" : 7,  // These value is returned once you call pmx.initModule()
     "max_size" : 5242880
  },
  "apps" : [{              // Module behavior options
    "script"             : "index.js",
    "merge_logs"         : true,
    "max_memory_restart" : "200M"
  }],
  "author": "Gataca Sanders",
  "license": "MIT"
}

モジュールエントリポイント

メインモジュールエントリポイントで、pmx.initModule(opts, fn(){});を呼び出してモジュールを初期化します。

var pmx     = require('pmx');

var conf    = pmx.initModule({
  // Override PID to be monitored
  pid              : pmx.resolvePidPaths(['/var/run/redis.pid']),
}, function(err, conf) {
  // Now the module is initialized
  require('./business_logic.js')(conf);
});

追加表示

モジュールがインストールされたら、PM2がプロセスを一覧表示する代わりに、目的のコンテンツを含むテーブルを表示するように動作を変更できます。

この動作を有効にするには、package.jsonを編集し、PM2_EXTRA_DISPLAYをtrueに設定したenvセクションを追加します。

package.json

{
  [...]
  "apps" : [{
    "script" : "index.js",
    "env"    : {
      "PM2_EXTRA_DISPLAY" : "true"
    }
  }],
  [...]
}

次にコード内

var pmx = require('pmx');

pmx.configureModule({
  human_info : [
    ['Status' , 'Module ready'],
    ['Comment', 'This is a superb comment the user should see'],
    ['IP'     , 'my machine ip!']
  ]
});

モジュールがインストールされると、この種のテーブルが表示されるようになります!

Extra module display.

モジュール設定

package.jsonでは、config属性の下で、モジュール内でアクセス可能なデフォルトオプションを宣言できます。これらの値は、PM2またはKeymetricsによって上書きできます。

デフォルト値

package.jsonの「config」属性の下にデフォルトの設定値を追加します

{
 [...]
 "config": {             // Default configuration value
    "days_interval" : 7,  // -> returned from var ret = pmx.initModule()
    "max_size" : 5242880  // -> e.g. ret.max_size
 }
 [...]
}

これらの値は、pmx.initModule()によって返されるデータを介してアクセス可能になります。

var conf = pmx.initModule({[...]}, function(err, conf) {
  // Now we can read these values
  console.log(conf.days_interval);
});

値の変更

モジュールのデフォルト値の変更は簡単です。次のように実行するだけです。

pm2 set module_name:option_name <new_value>

pm2 set server-monitoring:days_interval 2
  • 注1:これらの変数は、〜/.pm2/module_conf.jsonに書き込まれます。手動で編集することもできます。
  • 注2pm2 conf [module-name]を介して設定変数を表示できます
  • 注3:新しい値を設定すると、ターゲットモジュールが自動的に再起動されます
  • 注4:型変換は自動です(Boolean、Number、String)

モジュールの公開

モジュールの更新または公開は簡単です。pm2 publishコマンドは、モジュールのマイナーバージョンをインクリメントし、git add . ; git commit -m "VERSION"; git push origin masterを実行し、次にnpm publishを実行します。

cd my-module
pm2 publish

モジュール <3 Keymetrics

Keymetricsを使用すると、カスタマイズされたインターフェースメトリクス監視リモートアクションで作成できます。

これにより、このような結果が得られます

pm2-mongodbモジュール

pm2-server-monit-module

pmx.initModuleのオプション

var pmx     = require('pmx');

var conf    = pmx.initModule({

    [...]

    // Customize look and feel of this module
    widget : {
      // Logo to be displayed on the top left block (must be https)
      logo  : 'https://image.url',
      theme : ['#9F1414', '#591313', 'white', 'white'],

      // Toggle horizontal blocks above main widget
      el : {
        probes : false,
        actions: false
      },

      block : {
        // Display remote action block
        actions : true,

        // Display CPU / Memory
        cpu     : true,
        mem     : true,

        // Issues count display
        issues  : true,

        // Display meta block
        meta    : true,

        // Display metadata about the probe (restart nb, interpreter...)
        meta_block : true,

        // Name of custom metrics to be displayed as a "major metrics"
        main_probes : ['Processes']
      },
    },
}, function(err, conf) {
  /**
   * Main module entry
   */
  console.log(conf);
  // Do whatever you need
  require('./business_logic.js')(conf);
});

conf値の変更

メインのKeymetricsダッシュボードでは、モジュールに「構成」というボタンが表示されます。これをクリックすると、package.jsonに公開されているすべての構成変数にアクセスまたは変更できます!

モジュールを共有しませんか?

モジュールを作成した場合は、メールでお知らせください。モジュールを宣伝し、Keymetricsに追加します:https://keymetrics.io/contact/

楽しんでください!

このページに貢献する