Ubuntu 下用 JS 日志监控系统资源的实用方案
一 总体思路
二 在 Node.js 中记录系统指标
// monitor.js
const os = require('os');
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: 'info',
format: format.combine(format.timestamp(), format.json()),
transports: [
new transports.File({ filename: 'metrics.log', level: 'info' }),
new transports.Console()
]
});
function getSystemStats() {
const totalMem = os.totalmem();
const freeMem = os.freemem();
const usedMem = totalMem - freeMem;
const cpus = os.cpus();
const loadAvg = os.loadavg(); // 1/5/15 分钟负载
return {
timestamp: new Date().toISOString(),
platform: os.platform(),
arch: os.arch(),
cpu: {
model: cpus[0].model,
cores: cpus.length,
loadAverage: loadAvg[0] // 1 分钟负载
},
memory: {
total: (totalMem / 1024 / 1024 / 1024).toFixed(2) + ' GB',
used: (usedMem / 1024 / 1024 / 1024).toFixed(2) + ' GB',
free: (freeMem / 1024 / 1024 / 1024).toFixed(2) + ' GB',
usagePercent: ((usedMem / totalMem) * 100).toFixed(2) + '%'
},
uptime: (os.uptime() / 3600).toFixed(2) + ' hours'
};
}
// 定时记录
setInterval(() => {
logger.info('system_metrics', getSystemStats());
}, 5000);
三 与系统日志和应用日志联动
四 集中化监控与告警
五 快速排查命令清单