debian

如何利用Node.js日志监控系统资源

小樊
45
2025-09-04 15:40:09
栏目: 编程语言

利用Node.js进行日志监控系统资源,可以通过以下几个步骤实现:

1. 使用内置的console模块

Node.js提供了内置的console模块,可以用来输出日志信息。你可以使用console.logconsole.error等方法来记录不同级别的日志。

const fs = require('fs');
const path = require('path');

const logStream = fs.createWriteStream(path.join(__dirname, 'app.log'), { flags: 'a' });

function log(message) {
  const timestamp = new Date().toISOString();
  logStream.write(`${timestamp} - ${message}\n`);
}

log('Application started');

2. 使用第三方日志库

为了更方便地管理日志,可以使用一些流行的第三方日志库,如winstonpino

使用winston

winston是一个功能强大的日志库,支持多种传输方式(如文件、控制台、HTTP等)。

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

logger.info('Application started');

使用pino

pino是一个高性能的日志库,适合需要高吞吐量的应用。

const pino = require('pino');
const logger = pino({ level: 'info' });

logger.info('Application started');

3. 监控系统资源

Node.js本身并没有直接监控系统资源的功能,但你可以结合其他模块来实现这一功能。

使用os模块

os模块提供了获取系统资源信息的方法,如CPU使用率、内存使用情况等。

const os = require('os');

function getSystemInfo() {
  const cpuUsage = os.loadavg();
  const totalMemory = os.totalmem();
  const freeMemory = os.freemem();
  const usedMemory = totalMemory - freeMemory;

  return {
    cpuUsage,
    totalMemory,
    usedMemory
  };
}

setInterval(() => {
  const info = getSystemInfo();
  logger.info(`CPU Usage: ${info.cpuUsage}, Memory Usage: ${info.usedMemory}`);
}, 5000);

使用pidusage模块

pidusage模块可以获取Node.js进程的资源使用情况。

const pidusage = require('pidusage');
const pid = process.pid;

setInterval(() => {
  pidusage(pid, (err, stats) => {
    if (err) {
      logger.error(err);
      return;
    }
    logger.info(`CPU Usage: ${stats.cpu}, Memory Usage: ${stats.memory}`);
  });
}, 5000);

4. 集成到应用中

将上述代码集成到你的Node.js应用中,确保在应用启动时初始化日志记录,并定期监控系统资源。

const fs = require('fs');
const path = require('path');
const winston = require('winston');
const os = require('os');
const pidusage = require('pidusage');

// 初始化日志记录
const logStream = fs.createWriteStream(path.join(__dirname, 'app.log'), { flags: 'a' });
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

// 获取系统资源信息
function getSystemInfo() {
  const cpuUsage = os.loadavg();
  const totalMemory = os.totalmem();
  const freeMemory = os.freemem();
  const usedMemory = totalMemory - freeMemory;

  return {
    cpuUsage,
    totalMemory,
    usedMemory
  };
}

// 监控系统资源
const pid = process.pid;
setInterval(() => {
  pidusage(pid, (err, stats) => {
    if (err) {
      logger.error(err);
      return;
    }
    const info = getSystemInfo();
    logger.info(`CPU Usage: ${stats.cpu}, Memory Usage: ${info.usedMemory}`);
  });
}, 5000);

// 应用启动日志
logger.info('Application started');

通过上述步骤,你可以利用Node.js进行日志监控系统资源,并确保应用的稳定运行。

0
看了该问题的人还看了