请问Nodejs中express如何做性能监控?

请问Nodejs中express如何做性能监控?

我的应用用express做web框架,常用的工具,如mysql/mongodb/redis都用上了。

现在想做一些性能监控。比如,http接口,内部的方法,耗时有多少,内存消耗时多少,等等。

ps:我的应用时用pm2来部署的。

5 回复

如何在Express应用中进行性能监控

在使用Express作为Web框架的应用中,性能监控是一个重要的环节。通过性能监控,我们可以了解应用在运行过程中的瓶颈,从而进行优化。本文将介绍几种常见的方法来进行性能监控。

1. 使用 express-morgan

morgan 是一个HTTP请求日志中间件,可以记录每个请求的时间信息。这有助于我们了解请求处理的平均时间。

首先安装 morgan

npm install morgan --save

然后在应用中引入并配置:

const express = require('express');
const morgan = require('morgan');

const app = express();

// 使用morgan中间件记录请求时间
app.use(morgan(':method :url :status :response-time ms'));

// 定义路由
app.get('/', (req, res) => {
    // 模拟一些处理时间
    setTimeout(() => {
        res.send('Hello World!');
    }, 500);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

2. 使用 express-bunyan-logger

express-bunyan-logger 是一个基于Bunyan的日志库,可以记录详细的请求日志,包括时间、状态码等信息。

安装 bunyanexpress-bunyan-logger

npm install bunyan express-bunyan-logger --save

然后在应用中引入并配置:

const express = require('express');
const bformat = require('bunyan-format');
const bunyan = require('bunyan');
const btl = require('express-bunyan-logger');

const app = express();

// 配置日志
const logFormat = bformat({ outputMode: 'short' });
const logger = bunyan.createLogger({
    name: 'myapp',
    streams: [
        {
            stream: process.stdout,
            level: 'info'
        },
        {
            type: 'rotating-file',
            path: 'logs/app.log',
            period: '1d',   // daily rotation
            count: 7       // keep 7 days of logs
        }
    ]
});

// 使用express-bunyan-logger中间件
app.use(btl({
    loggingFormat: btl.formatAsBunyan(logger),
    requestBodyHeader: 'x-request-body',
    responseBodyHeader: 'x-response-body'
}));

// 定义路由
app.get('/', (req, res) => {
    // 模拟一些处理时间
    setTimeout(() => {
        res.send('Hello World!');
    }, 500);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

3. 使用PM2监控

由于你的应用已经使用了PM2进行部署,PM2本身提供了丰富的监控功能,包括CPU、内存使用情况等。

启动应用时加上 --watch 参数以开启监控:

pm2 start app.js --watch

通过PM2的命令行工具,你可以查看到详细的信息:

pm2 monit

以上就是几种在Express应用中进行性能监控的方法。结合这些工具,你可以全面地了解应用的运行状态,并进行相应的优化。


老外的Newrelic 国内也有一个仿的他的,不过名字忘了。。。。

正在试newrelic,不过总感觉这是把自己完全暴露被别人了。

要在Node.js中使用Express进行性能监控,可以利用一些第三方库和工具,例如morgan用于HTTP请求日志记录,express-rate-limit用于限流,以及newrelicpm2自带的监控功能。

这里我将提供一个简单的例子,使用newrelic来进行性能监控,并且配合PM2部署。newrelic是一个全面的性能监控解决方案,支持错误追踪、事务追踪和数据库查询分析等功能。

首先安装必要的库:

npm install express newrelic

然后创建一个简单的Express应用,并配置New Relic:

const express = require('express');
const newrelic = require('newrelic');

const app = express();

app.get('/', (req, res) => {
    // 模拟一个耗时操作
    const start = Date.now();
    setTimeout(() => {
        res.send(`Hello World! 耗时:${Date.now() - start} ms`);
    }, 1000);
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
});

接着配置New Relic。你需要在项目根目录下创建一个名为newrelic.js的文件,并添加以下内容(请替换YOUR_LICENSE_KEY):

module.exports = {
    licenseKey: 'YOUR_LICENSE_KEY',
    appName: 'YourAppName',
    logging: {
        level: 'info'
    }
};

最后,启动应用并使用PM2管理它:

pm2 start index.js --name "your-app-name"

这样,New Relic将会自动收集并展示你的Express应用的各种性能指标。你可以在New Relic的Web界面中查看诸如响应时间、吞吐量等信息。

如果你不想使用第三方服务,也可以考虑使用PM2的内置监控功能。只需启动PM2时添加--watch选项即可开始基本的监控:

pm2 start index.js --name "your-app-name" --watch

通过PM2的Web界面或者使用命令行工具pm2 monit,你可以查看CPU、内存使用情况及进程状态等信息。

以上就是一种简单的实现方式,你可以根据自己的需求选择合适的方案。

回到顶部