插件窝 干货文章 如何用JS监控Linux服务器

如何用JS监控Linux服务器

监控 const 使用 stats 549    来源:    2025-05-04

使用JavaScript监控Linux服务器

要在Linux服务器上使用JavaScript进行监控,有几种主要方法。以下是几种可行的方案:

1. 使用Node.js构建监控系统

Node.js可以在Linux服务器上运行,并利用其丰富的生态系统来监控服务器状态。

基本实现步骤:

  1. 安装Node.js

    curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
  2. 创建监控脚本(例如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/');
    
  3. 运行监控脚本

    node monitor.js
    

2. 使用现有监控库

可以使用专门的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);

3. 使用浏览器JavaScript通过API监控

如果要在浏览器中显示监控数据:

  1. 在服务器上创建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);
    
  2. 在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>
    

4. 使用专业监控解决方案

对于生产环境,可以考虑以下专业方案:

  1. PM2监控(Node.js进程管理):

    npm install pm2 -g
    pm2 monit
    
  2. Netdata(支持Node.js插件):

    bash <(curl -Ss https://my-netdata.io/kickstart.sh)
    
  3. Prometheus + Grafana

    • 使用Node.js的Prometheus客户端库
    • 配置Grafana仪表板

安全注意事项

  1. 确保监控接口有适当的认证
  2. 不要暴露敏感信息
  3. 限制监控端点的访问IP
  4. 考虑使用HTTPS加密通信

以上方案可以根据具体需求进行组合和扩展。对于简单的监控,纯Node.js方案足够;对于企业级监控,建议使用专业解决方案如Prometheus或Netdata。