基于sysstat + Nodejs的 Linux服务器监控系统v1.0 欢迎批评指正

基于sysstat + Nodejs的 Linux服务器监控系统v1.0 欢迎批评指正

funWatch Linux服务器监控系统v1.0 基于sysstat + nodejs + mongoosejs(mongodb) + expressjs + ejs 默认每5秒钟收集1次数据 默认每5分钟保存一次数据 * mongodb 集合: 服务器列表:servers 每5分钟内的平均值:cpus mems ios nets loads 每5秒钟采集的原始数据:cpu_alls mem_alls io_alls net_alls load_alls * 运行:node watch.js [period] [internal] node watch.js 1 2 //每2秒收集一次数据,每分钟保存一次数据 运行报表server:node app.js 浏览器访问:http://localhost:3001/

github:https://github.com/funfly/funwatch/


4 回复

基于sysstat + Node.js的Linux服务器监控系统 v1.0

简介

本项目旨在提供一个基于 sysstatNode.js 的 Linux 服务器监控系统。该系统能够实时监控 CPU、内存、磁盘 I/O、网络以及系统负载,并将这些数据存储到 MongoDB 中。用户可以通过简单的命令行参数来调整数据收集的频率和存储周期。

技术栈

  • sysstat: 用于收集系统性能数据。
  • Node.js: 用于处理数据并提供 Web 服务。
  • mongoose: 用于与 MongoDB 进行交互。
  • express.js: 用于构建 Web 服务器。
  • ejs: 用于渲染前端页面。

数据结构

  • 服务器列表 (servers): 存储监控的服务器信息。
  • 每5分钟内的平均值 (cpus, mems, ios, nets, loads): 存储每5分钟的平均性能数据。
  • 每5秒钟采集的原始数据 (cpu_alls, mem_alls, io_alls, net_alls, load_alls): 存储每5秒钟的原始性能数据。

使用方法

  1. 运行监控程序:

    node watch.js [period] [interval]
    
    • period: 数据保存周期(分钟)。
    • interval: 数据收集间隔(秒)。

    示例:

    node watch.js 5 5
    

    这表示每5秒钟收集一次数据,并且每5分钟保存一次数据。

  2. 运行报表服务:

    node app.js
    
  3. 访问报表: 打开浏览器访问 http://localhost:3001/

示例代码

以下是一个简单的 watch.js 示例代码,展示如何使用 sysstat 收集数据并存储到 MongoDB 中:

const { execSync } = require('child_process');
const mongoose = require('mongoose');
const interval = process.argv[3] || 5; // 默认5秒
const period = process.argv[2] * 60 || 300; // 默认5分钟

// 连接 MongoDB
mongoose.connect('mongodb://localhost/funwatch', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const CpuSchema = new mongoose.Schema({
  timestamp: Date,
  usage: Number
});
const Cpu = mongoose.model('Cpu', CpuSchema);

setInterval(() => {
  try {
    const output = execSync('sar -u 1 1').toString();
    const usage = parseFloat(output.split('\n')[3].split(/\s+/).slice(-1)[0]);
    Cpu.create({ timestamp: new Date(), usage });
  } catch (e) {
    console.error(e);
  }
}, interval * 1000);

setTimeout(() => {
  process.exit(0);
}, period * 1000);

总结

通过结合 sysstatNode.js,我们创建了一个灵活且功能强大的 Linux 服务器监控系统。用户可以根据需要调整数据收集频率和保存周期。希望这个项目能对大家有所帮助,并欢迎大家提出宝贵的意见和建议。

GitHub

https://github.com/funfly/funwatch


不错,支持一下!

修改一下config文件,mongodb的路径,以及启动的option(本机mongodb不需要密码); mac下修改一下执行脚本: //IP: /sbin/ifconfig | grep ‘inet addr:’ | grep -v ‘127.0.0.1’ | cut -d : -f2 | awk '{print $1}' exec("/sbin/ifconfig | grep 'inet ’ | grep -v ‘127.0.0.1’ | cut -d : -f2 | awk ‘{print $2}’"

另外仓库中以来包不完整,需要下载mongoose和debug。

多多批评指正 共同进步

基于sysstat + Node.js的Linux服务器监控系统v1.0可以实现对服务器性能数据的实时收集、存储和展示。下面将简要介绍如何搭建这样一个系统,并提供一些核心代码片段以供参考。

系统架构

  • sysstat:用于收集Linux服务器的性能数据。
  • Node.js:后端服务,处理数据收集、存储以及API请求。
  • Mongoose(与MongoDB结合):数据库操作,存储监控数据。
  • Express.js:Web框架,处理HTTP请求。
  • EJS:模板引擎,用于渲染HTML页面。

主要功能

  1. 数据收集:利用sysstat每5秒收集一次CPU、内存、I/O、网络负载等性能指标。
  2. 数据存储:将收集的数据每5分钟保存到MongoDB中。
  3. 数据展示:通过Express.js和EJS渲染动态报表。

示例代码

数据收集模块(watch.js)

const { exec } = require('child_process');
const mongoose = require('mongoose');
const period = process.argv[2] || 5; // 收集周期,默认为5秒
const internal = process.argv[3] || 300; // 存储间隔,默认为300秒(5分钟)

// 连接MongoDB
mongoose.connect('mongodb://localhost/funwatch', { useNewUrlParser: true, useUnifiedTopology: true });

// 定义数据模型
const DataSchema = new mongoose.Schema({
    timestamp: Date,
    cpu: Number,
    memory: Number,
    diskIO: Number,
    network: Number,
    load: Number
});

const DataModel = mongoose.model('Data', DataSchema);

setInterval(() => {
    exec('sar -A', (error, stdout) => {
        if (error) {
            console.error(`执行命令时出错: ${error}`);
            return;
        }
        const data = parseSarOutput(stdout);
        new DataModel(data).save().catch(console.error);
    });
}, internal * 1000); // 转换为毫秒

function parseSarOutput(output) {
    // 实现从sar输出解析数据的功能
}

Web服务器(app.js)

const express = require('express');
const ejs = require('ejs');
const mongoose = require('mongoose');

const app = express();
mongoose.connect('mongodb://localhost/funwatch', { useNewUrlParser: true, useUnifiedTopology: true });

app.set('view engine', 'ejs');

app.get('/', async (req, res) => {
    const data = await DataModel.find({});
    res.render('index', { data });
});

app.listen(3001, () => console.log('Server running on port 3001'));

总结

以上代码展示了如何使用Node.js结合sysstat来构建一个简单的Linux服务器监控系统。你可以根据具体需求调整参数或增加更多功能,如更精细的数据筛选、报警机制等。希望这能帮助你开始构建自己的监控系统。

回到顶部