PM2 模块

PM2 模块是由 PM2 安装和管理的独立软件。这些软件是从 NPM 存储库中提取的,并作为 NPM 上的通用 Javascript 库发布。

https://pm2.keymetrics.io/docs/advanced/pm2-module-system/

任何人都可以创建和发布模块。模块可以是日志轮换模块、独立的 http 代理、负载均衡器、基于 Node.js 的维基百科、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 并添加 env 部分并将PM2_EXTRA_DISPLAY 设置为 true

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!']
  ]
});

安装模块后,您将能够看到这种表格!

模块配置

package.json 中,您可以在属性下的模块中声明可访问的默认选项config。这些值可以被 PM2Keymetrics 覆盖。

默认值

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
  • NOTE1:这些变量是写在里面的~/.pm2/module_conf.json,你也可以手动编辑
  • 注意2:您可以通过以下方式显示配置变量pm2 conf [module-name]
  • 注 3:设置新值时,目标模块会自动重启
  • 注 4:类型转换是自动的(布尔值、数字、字符串)

发布模块

更新或发布模块非常简单。该pm2 publish命令将递增模块的次要版本,git add . ; git commit -m "VERSION"; git push origin master然后它将递增npm publish

cd my-module
pm2 publish

模块 关键指标

使用Keymetrics,您可以创建一个带有度量监控和远程操作的自定义界面。

这会给你这样的结果:

pm2-mongodb 模块

pm2-server-monit-模块

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);
});

更改配置值

在主要的 Keymetrics 仪表板中,模块将有一个名为“配置”的按钮。单击它后,您将能够访问或/和修改 package.json 上公开的所有配置变量!

作者:Jeebiz  创建时间:2023-02-26 01:08
最后编辑:Jeebiz  更新时间:2023-02-26 22:38