PM2 监控 Node.js 应用程序的方式和方法

在 Node.js 开发中,我们常常使用 PM2 来管理和部署应用程序。PM2 不仅可以让我们方便地启动和停止应用程序,还可以通过内置的监控和日志功能,提供实时的性能和运行状态信息。本文将介绍如何使用 PM2 监控 Node.js 应用程序的方式和方法,并提供示例代码。

PM2 监控功能的介绍

PM2 的监控功能包括:

  • 进程状态监控:包括 CPU 和内存的使用情况、进程启动时间、运行时间等;
  • 日志管理:记录应用程序的日志信息,并支持在控制台上实时观察;
  • 自定义监控指标:可以通过编写自定义的监控指标,收集应用程序的自定义状态信息。

除此之外,PM2 还提供了多种监控手段,包括:

  • PM2 Monitor:内置的监控功能,可以在控制台或浏览器上实时观察应用程序的状态和日志信息;
  • Keymetrics:第三方网站和应用程序,可以通过 Keymetrics 提供的 API 或者云服务,收集 PM2 的监控数据,并提供更丰富的监控和告警功能;
  • Ecosystem 文件:可以在项目根目录下编写 Ecosystem 文件,配置监控和部署相关的参数,实现更自定义的监控和管理方式。

进程状态监控

PM2 的进程状态监控功能非常方便,可以在控制台或浏览器上实时查看应用程序的状态和关键指标。

在控制台上使用以下命令,可以查看所有应用程序的状态:

pm2 monit

在浏览器上使用以下 URL,可以访问 PM2 内置的监控视图:

http://localhost:9615

图 1 是 PM2 内置的监控视图,可以看到 CPU 和内存的使用情况、进程运行时间、以及当前请求的状态信息。

图 1. PM2 Monitor 的界面示意图

除了使用 PM2 Monitor,我们还可以通过 PM2 提供的 API,编写自定义脚本,实现更简洁和自定义的监控方式。例如,以下代码展示了如何使用 PM2 API,实时监控正在运行的应用程序,并在控制台输出运行时间和 CPU 使用情况的统计信息:

const pm2 = require('pm2');

pm2.connect(() => {
  pm2.list((err, processes) => {
    processes.forEach((process) => {
      pm2.monitor(process.pm_id, (err, data) => {
        console.log(`[${process.name}] running ${data.elapsed}s, CPU ${data.cpu}%`);
      });
    });
  });
});

日志管理

在 Node.js 应用程序中,日志管理是一个非常重要的环节。PM2 提供了内置的日志管理功能,可以非常方便地记录应用程序的日志信息,以及在控制台或浏览器上实时观察日志输出。

使用以下命令,可以查看所有应用程序的日志输出:

pm2 logs

使用以下命令,可以实时追踪所有应用程序的日志输出:

pm2 logs -f

PM2 还可以自动轮换日志文件,并支持多种日志格式,例如 JSON、日志等级等。

自定义监控指标

除了 PM2 内置的监控功能之外,我们还可以自定义监控指标,收集更自定义和精细化的应用程序状态信息。

在应用程序中,可以使用 pm2.emit 方法,自定义事件并附带自定义数据。示例代码如下:

const pm2 = require('pm2');

pm2.connect((err) => {
  const process = pm2.start({
    script: 'app.js',
    name: 'my-app',
  });

  setInterval(() => {
    const data = {
      memory: process.memoryUsage(),
      timestamp: Date.now(),
    };

    pm2.emit('app:data', data);
  }, 5000);
});

在 PM2 中,我们可以使用以下命令,订阅自定义事件并处理自定义数据:

pm2 subscribe app:data

可以使用 pm2 unsubsribe 方法,取消订阅已有的自定义事件。

总结与展望

使用 PM2 监控 Node.js 应用程序,可以方便地观察应用程序的状态和日志信息,帮助我们及时发现和解决问题。本文介绍了 PM2 的监控功能和实现方法,并提供了示例代码,相信读者已经掌握了 PM2 监控的基本知识。我们还可以通过自定义监控指标等方式,收集更多自定义的应用程序状态信息,进一步完善应用程序的智能化运维体系。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a4a38fadd4f0e0ffcf39e2


纠错反馈