要在Linux服务器上使用JavaScript进行监控,有几种主要方法。以下是几种可行的方案:
Node.js可以在Linux服务器上运行,并利用其丰富的生态系统来监控服务器状态。
安装Node.js:
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
创建监控脚本(例如monitor.js
):
const os = require('os');
const fs = require('fs');
const http = require('http');
// 获取系统信息
function getSystemInfo() {
return {
uptime: os.uptime(),
loadAvg: os.loadavg(),
freeMem: os.freemem(),
totalMem: os.totalmem(),
cpuUsage: process.cpuUsage(),
diskUsage: getDiskUsage()
};
}
function getDiskUsage() {
// 这里可以添加获取磁盘使用情况的逻辑
try {
const stats = fs.statSync('/');
return {
total: stats.blocks * stats.blksize,
free: stats.bfree * stats.blksize
};
} catch (err) {
return { error: err.message };
}
}
// 创建HTTP服务器展示监控数据
http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify(getSystemInfo(), null, 2));
}).listen(3000);
console.log('Server running at http://localhost:3000/');
运行监控脚本:
node monitor.js
可以使用专门的Node.js监控库简化开发:
npm install systeminformation
示例代码:
const si = require('systeminformation');
setInterval(async () => {
const cpu = await si.cpuTemperature();
const mem = await si.mem();
const disk = await si.fsSize();
console.log(`CPU Temp: ${cpu.main}°C`);
console.log(`Memory: ${Math.round(mem.used / 1024 / 1024)}MB/${Math.round(mem.total / 1024 / 1024)}MB`);
console.log(`Disk: ${disk[0].use}% used`);
}, 1000);
如果要在浏览器中显示监控数据:
在服务器上创建API端点(使用Express.js):
const express = require('express');
const app = express();
const si = require('systeminformation');
app.get('/api/stats', async (req, res) => {
const stats = {
cpu: await si.currentLoad(),
memory: await si.mem(),
uptime: os.uptime()
};
res.json(stats);
});
app.listen(3000);
在HTML页面中获取数据:
<!DOCTYPE html>
<html>
<body>
<div id="stats"></div>
<script>
async function updateStats() {
const response = await fetch('http://your-server:3000/api/stats');
const data = await response.json();
document.getElementById('stats').innerHTML = `
CPU: ${data.cpu.currentload.toFixed(1)}%<br>
Memory: ${(data.memory.used / 1024 / 1024).toFixed(1)}MB used
`;
}
setInterval(updateStats, 1000);
updateStats();
</script>
</body>
</html>
对于生产环境,可以考虑以下专业方案:
PM2监控(Node.js进程管理):
npm install pm2 -g
pm2 monit
Netdata(支持Node.js插件):
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
Prometheus + Grafana:
以上方案可以根据具体需求进行组合和扩展。对于简单的监控,纯Node.js方案足够;对于企业级监控,建议使用专业解决方案如Prometheus或Netdata。