ubuntu

如何利用Ubuntu Node.js日志进行性能分析

小樊
58
2025-09-18 05:20:23
栏目: 编程语言

1. 启用结构化详细日志记录
在Ubuntu环境下,使用高性能日志库(如WinstonPino)配置结构化日志,确保记录关键性能指标(请求时间、响应状态、错误详情、内存/CPU使用率)。例如,用Winston记录JSON格式日志:

const winston = require('winston');
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
    new winston.transports.File({ filename: 'logs/combined.log' })
  ]
});
logger.info('Request received', { method: 'GET', url: '/api/data', responseTime: 120 });

结构化日志便于后续用工具(如ELK、Grafana)解析和分析。

2. 内置性能工具集成
利用Node.js内置模块收集性能数据并写入日志:

const { performance, PerformanceObserver } = require('perf_hooks');
const start = performance.now();
// 模拟业务代码
setTimeout(() => {
  const end = performance.now();
  logger.info('API execution time', { time: end - start });
}, 100);

// 监控内存使用
setInterval(() => {
  const memory = process.memoryUsage();
  logger.info('Memory usage', memory);
}, 5000);

这些数据能直接反映应用的资源消耗情况。

3. 第三方APM工具接入
使用New RelicDatadogElastic APM等APM工具,自动收集性能指标(请求延迟、数据库查询时间、错误率)并生成可视化报告。以PM2为例(轻量级进程管理器):

npm install pm2 -g
pm2 start app.js --name "my-node-app"
pm2 monit  # 实时监控CPU、内存、日志
pm2 logs   # 查看实时日志

APM工具能快速定位性能瓶颈(如慢查询、高延迟接口),无需手动解析日志。

4. 日志分析与瓶颈识别
使用工具分析日志中的性能数据:

5. 性能分析工具深度诊断
对于复杂瓶颈(如CPU热点、内存泄漏),使用Node.js内置工具:

node --inspect app.js  # 打开Chrome://inspect,录制CPU profile
node --prof app.js     # 运行10分钟后,生成profile文件
node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt

这些工具能深入代码层面,定位具体性能问题。

6. 日志轮转与长期管理
避免日志文件过大占用磁盘空间,使用**winston-daily-rotate-filelogrotate**进行日志轮转:

const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
  transports: [
    new DailyRotateFile({
      filename: 'logs/application-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d'
    })
  ]
});
/path/to/logs/*.log {
  daily
  rotate 14
  compress
  missingok
  notifempty
  create 0640 www-data www-data
}

日志轮转能保持日志文件的可管理性,便于长期分析。

0
看了该问题的人还看了