1.PM2 模块

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

任何人都可以创建和发布模块。模块可以是日志轮换模块独立的 http 代理、负载均衡器、基于 Node.js 的维基百科、DNS 服务器或任何类型的实用程序。你的创造力是极限!

2.管理模块

管理模块很简单:

  1. # 安装
  2. pm2 install <module-name>
  3. # 更新一个模块
  4. pm2 install <module-name>
  5. # 从Github上 (username/repository) 安装一个模块
  6. pm2 install pm2-hive/pm2-docker
  7. # 强制模块重启
  8. pm2 restart <module-name>
  9. # 获取更多信息
  10. pm2 describe <module-name>
  11. # 从本地文件夹以开发模式安装模块
  12. pm2 install .
  13. # 生成模块样板
  14. pm2 module:generate <module-name>
  15. # 卸载模块
  16. pm2 uninstall <module-name>
  17. # 发布新模块(包括Semver+Git push+NPM发布)
  18. pm2 publish

3.创建模块

要生成模块示例:

  1. pm2 module:generate <module-name>

现在让我们用 PM2 运行这个模块:

  1. cd <module-name>
  2. pm2 install .

您现在可以编辑源,当您更改某些内容时,PM2 将自动重新启动模块(监视选项已激活)。

显示模块日志:

  1. pm2 logs <module-name>

要移除模块:

  1. pm2 uninstall <module-name>

4.Package.json

可以将补充信息添加到package.json文件中。

您可以在config属性和模块行为下定义配置值,就像常见的pm2 托管进程一样

例子:

  1. {
  2. "name": "pm2-logrotate", // 用作模块名
  3. "version": "1.0.0", // 用作模块版本
  4. "description": "my desc", // 用作模块注释
  5. "dependencies": {
  6. "pmx": "latest"
  7. },
  8. "config": { // 默认配置值
  9. // 这些值可以覆盖 `pm2 set <module-name>:<attr> <val>`
  10. "days_interval" : 7, // 调用 pmx.initModule() 后将返回这些值
  11. "max_size" : 5242880
  12. },
  13. "apps" : [{ // 模块行为选项
  14. "script" : "index.js",
  15. "merge_logs" : true,
  16. "max_memory_restart" : "200M"
  17. }],
  18. "author": "Gataca Sanders",
  19. "license": "MIT"
  20. }

5.模块入口点

在您的主模块入口点,调用pmx.initModule(opts, fn(){});来初始化您的模块:

  1. var pmx = require('pmx');
  2. var conf = pmx.initModule({
  3. // 要监控的超控PID
  4. pid : pmx.resolvePidPaths(['/var/run/redis.pid']),
  5. }, function(err, conf) {
  6. // 现在模块已初始化
  7. require('./business_logic.js')(conf);
  8. });

6.额外显示

安装模块后,无需 PM2 列出您的进程,您可以更改其行为以显示包含所需内容的表格。

要启用此行为,请编辑 package.json 并添加 env 部分,并将 PM2_EXTRA_DISPLAY设置为 true:

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

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

7.模块配置

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

7.1.默认值

在 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) {
  // 现在我们可以读取这些值
  console.log(conf.days_interval);
});

7.2.更改值

更改模块的默认值很简单,只需执行以下操作:

pm2 set module_name:option_name <new_value>

例子:

pm2 set server-monitoring:days_interval 2
  • NOTE1 : 这些变量是写入的~/.pm2/module_conf.json,您也可以手动编辑
  • NOTE2:您可以通过显示配置变量pm2 conf [module-name]
  • NOTE3 : 当您设置新值时,目标模块会自动重新启动
  • NOTE4:类型转换是自动的(布尔、数字、字符串)

8.发布模块

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

cd my-module
pm2 publish

9.模块 <3 关键指标

使用Keymetrics,您可以创建带有指标监控远程操作自定义界面

这会给你这样的结果:
image.png
pm2-mongodb 模块

image.png
pm2-server-monit-module

9.1.pmx.initModule 的选项

var pmx     = require('pmx');

var conf    = pmx.initModule({

    [...]

    // 自定义此模块的外观
    widget : {
      // 将显示在左上方块上的徽标(必须为https)
      logo  : 'https://image.url',
      theme : ['#9F1414', '#591313', 'white', 'white'],

      // 在主窗口小部件上方切换水平块
      el : {
        probes : false,
        actions: false
      },

      block : {
        // 显示远程操作块
        actions : true,

        // 显示CPU/内存
        cpu     : true,
        mem     : true,

        // 问题计数显示
        issues  : true,

        // 显示元块
        meta    : true,

        // 显示有关探测器的元数据(重新启动nb、解释器…)
        meta_block : true,

        // 要显示为“主要指标”的自定义指标的名称
        main_probes : ['Processes']
      },
    },
}, function(err, conf) {
  /**
   * 主模块条目
   */
  console.log(conf);
  // 你需要什么就做什么
  require('./business_logic.js')(conf);
});

9.2.更改配置值

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

10.想分享你的模块吗?

如果您构建了模块,请给我们发送电子邮件,我们将推广您的模块并将其添加到 Keymetrics:https ://keymetrics.io/contact/