2012-04-26 216 views
5

我有一个分布式服务器系统。如何使用node.js获取系统统计信息

有很多服务器,通过PubSub协调。 所有这些都连接到统计服务器。 每分钟服务器将他们的统计数据发送到统计服务器(处理了多少请求,平均时间等)。

所以......在这个统计信息中包含系统状态会很好。 我需要CPU负载(每个核心)和可用内存量。

我做了一点小小的解决方法,决定用“exec”调用一个linux命令,解析答案并形成一个用于发送的JSON数据。

但是我怎样才能从命令行获取这些数据呢?

在Mac OS X上,我可以通过geektool脚本轻松获得所需的所有内容,但在Linux(debian)上却无法使用。

例如:

top -l 1 | awk '/PhysMem/ {print "Used: " $8 " Free: " $10}' 

在Mac OS X Lion中,我得到:

Used: 3246M Free: 848M 

而就在Debian的一个错误......

+0

您是否试过Dtrace? http://mcavage.github.com/presentations/dtrace_conf_2012-04-03 – codef0rmer 2012-04-26 13:22:53

+0

https://github.com/sebhildebrandt/systeminformation – vbarbarosh 2017-01-30 02:12:00

回答

7

在Linux上,你可以用的/ proc 。查看here了解一些命令行示例来读取统计信息。

倒不如直接读取,虽然从节点的文件,使用fs.readFile()

更新: 也有OS API这可能是更好的。 示例用法:Convert the output of os.cpus() in Node.js to percentage

+0

Thnx很多!找到了获得大量空闲内存的方法,但是我仍然无法在每个内核上获得CPU负载。而.../proc/loadavg返回零。这是正常的吗? – brianconnoly 2012-04-26 12:25:02

+1

使用os.loadavg();.它会以1分钟,5分钟和15分钟的数组形式返回服务器的总负载。 – Licson 2012-12-14 09:03:25

+0

适用于OS API的+1 – 2013-03-12 07:11:36

1

您可以试试os-usage这是top命令的包装。

它提供统计信息,如CPU使用率和内存使用情况。实例:

var usage = require('os-usage'); 

// create an instance of CpuMonitor 
var cpuMonitor = new usage.CpuMonitor(); 

// watch cpu usage overview 
cpuMonitor.on('cpuUsage', function(data) { 
    console.log(data); 

    // { user: '9.33', sys: '56.0', idle: '34.66' } 
}); 

// watch processes that use most cpu percentage 
cpuMonitor.on('topCpuProcs', function(data) { 
    console.log(data); 

    // [ { pid: '21749', cpu: '0.0', command: 'top' }, 
    // { pid: '21748', cpu: '0.0', command: 'node' }, 
    // { pid: '21747', cpu: '0.0', command: 'node' }, 
    // { pid: '21710', cpu: '0.0', command: 'com.apple.iCloud' }, 
    // { pid: '21670', cpu: '0.0', command: 'LookupViewServic' } ] 
});