在 Debian 系统上,使用 Node.js 追踪请求处理时间可以通过多种方法实现。以下介绍几种常用的方法,包括使用内置的 console.time
、集成日志库(如 winston
或 morgan
)、以及使用性能监控工具(如 New Relic
或 Datadog
)。根据具体需求选择合适的方法。
console.time
这是最简单的方法,适用于开发和调试阶段。
const http = require('http');
const server = http.createServer((req, res) => {
const start = Date.now();
// 模拟请求处理
setTimeout(() => {
res.end('Hello World\n');
}, 150); // 假设处理时间为150ms
// 请求结束后计算并打印处理时间
req.on('end', () => {
const duration = Date.now() - start;
console.log(`请求处理时间: ${duration}ms`);
});
});
server.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000/');
});
start
。如果你使用的是 Express 框架,可以编写一个中间件来记录每个请求的处理时间。
如果尚未安装 Express:
npm install express
const express = require('express');
const app = express();
// 自定义中间件记录请求处理时间
app.use((req, res, next) => {
const start = Date.now();
// 监听响应结束事件
res.on('finish', () => {
const duration = Date.now() - start;
console.log(`${req.method} ${req.url} - ${duration}ms`);
});
next();
});
// 示例路由
app.get('/', (req, res) => {
// 模拟异步操作
setTimeout(() => {
res.send('Hello World!');
}, 200);
});
app.listen(3000, () => {
console.log('Express 服务器运行在 http://localhost:3000/');
});
res.on('finish')
确保在响应完全发送后计算时间,无论是否有错误发生。winston
是一个功能强大的日志库,可以更灵活地记录和管理日志。
npm install winston
const express = require('express');
const winston = require('winston');
// 配置 Winston 日志
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.printf(({ timestamp, level, message }) => {
return `${timestamp} ${level}: ${message}`;
})
),
transports: [
new winston.transports.Console(),
// 可以添加文件传输等其他传输方式
// new winston.transports.File({ filename: 'logs/app.log' })
],
});
const app = express();
// 自定义中间件记录请求处理时间
app.use((req, res, next) => {
const start = Date.now();
res.on('finish', () => {
const duration = Date.now() - start;
logger.info(`${req.method} ${req.url} - ${duration}ms`);
});
next();
});
// 示例路由
app.get('/', (req, res) => {
setTimeout(() => {
res.send('Hello World!');
}, 250);
});
app.listen(3000, () => {
logger.info('Express 服务器运行在 http://localhost:3000/');
});
winston
记录带有时间戳和格式化的日志。对于生产环境,建议使用专业的性能监控工具来追踪请求处理时间。这些工具提供更丰富的功能和可视化界面。
New Relic 是一个广泛使用的应用性能监控(APM)工具。
注册并创建应用:访问 New Relic 注册账号,并创建一个新的应用。
安装 New Relic Node.js Agent:
npm install newrelic
配置应用:
在应用的入口文件(如 app.js
)顶部添加以下代码:
const newrelic = require('newrelic');
启动应用:
node app.js
查看监控数据:登录 New Relic 控制台,查看应用的性能指标和请求处理时间。
Datadog 是另一个强大的监控和分析平台。
注册并创建应用:访问 Datadog 注册账号,并创建一个新的应用。
安装 Datadog Agent 和 Node.js 插件:
按照 Datadog 官方文档 配置 Datadog Agent 和 Node.js 插件。
在应用中集成 Datadog:
const datadog = require('datadog-rum');
datadog.initialize({
applicationId: 'YOUR_APPLICATION_ID',
clientToken: 'YOUR_CLIENT_TOKEN',
site: 'datadoghq.com', // 或者 'datadoghq.eu' 等
});
启动应用:
node app.js
查看监控数据:登录 Datadog 控制台,查看应用的性能指标和请求处理时间。
morgan
日志中间件结合自定义格式morgan
是一个流行的 HTTP 请求日志中间件,可以与自定义格式结合来记录请求处理时间。
npm install morgan
const express = require('express');
const morgan = require('morgan');
const app = express();
// 自定义 Morgan 格式,添加响应时间
morgan.token('response-time', (req, res) => {
return `${res.responseTime}ms`;
});
app.use(morgan(':method :url :status :response-time :res[content-length] - :response-time ms'));
// 示例路由
app.get('/', (req, res) => {
setTimeout(() => {
res.send('Hello World!');
}, 300);
});
app.listen(3000, () => {
console.log('Express 服务器运行在 http://localhost:3000/');
});
morgan
的自定义 token 功能记录响应时间。根据应用的需求和复杂程度,可以选择不同的方法来追踪请求处理时间:
console.time
或简单的中间件。winston
或 morgan
等日志库,可以更好地管理和分析日志数据。选择合适的方法,有助于优化应用性能,及时发现并解决潜在的问题。