基于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/
基于sysstat + Node.js的Linux服务器监控系统 v1.0
简介
本项目旨在提供一个基于 sysstat
和 Node.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秒钟的原始性能数据。
使用方法
-
运行监控程序:
node watch.js [period] [interval]
period
: 数据保存周期(分钟)。interval
: 数据收集间隔(秒)。
示例:
node watch.js 5 5
这表示每5秒钟收集一次数据,并且每5分钟保存一次数据。
-
运行报表服务:
node app.js
-
访问报表: 打开浏览器访问 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);
总结
通过结合 sysstat
和 Node.js
,我们创建了一个灵活且功能强大的 Linux 服务器监控系统。用户可以根据需要调整数据收集频率和保存周期。希望这个项目能对大家有所帮助,并欢迎大家提出宝贵的意见和建议。
GitHub
不错,支持一下!
修改一下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页面。
主要功能
- 数据收集:利用
sysstat
每5秒收集一次CPU、内存、I/O、网络负载等性能指标。 - 数据存储:将收集的数据每5分钟保存到MongoDB中。
- 数据展示:通过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服务器监控系统。你可以根据具体需求调整参数或增加更多功能,如更精细的数据筛选、报警机制等。希望这能帮助你开始构建自己的监控系统。