2012-04-26 28 views
5

Tengo un sistema de servidor distribuido.Cómo obtener estadísticas del sistema con node.js

Hay muchos servidores, coordinados a través de PubSub. Todos ellos están conectados al servidor de estadísticas. Cada minuto los servidores envían sus estadísticas al servidor de estadísticas (cuántas solicitudes se procesaron, el tiempo promedio, etc.).

Entonces ... Sería bueno incluir el estado del sistema en este stat-messages. Necesito carga de CPU (cada núcleo) y la cantidad de memoria libre.

Hice una pequeña solución y decidí llamar a un comando de Linux con "exec", analizar la respuesta y formar un JSON de datos para enviar.

Pero, ¿cómo puedo obtener esta información desde la línea de comandos?

En Mac OS X puedo obtener fácilmente todo lo que necesito con los scripts geektool, pero en Linux (debian) no funcionan.

Por ejemplo:

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

En Mac OS X Lion me sale:

Used: 3246M Free: 848M 

Y sólo un error en debian ...

+0

¿Has probado Dtrace? http://mcavage.github.com/presentations/dtrace_conf_2012-04-03 – codef0rmer

+0

https://github.com/sebhildebrandt/systeminformation – vbarbarosh

Respuesta

7

En Linux, puede utilizar/proc . Consulte here para obtener un grupo de ejemplos de líneas de comando para leer las estadísticas.

Sería mejor leer los archivos del nodo directamente sin embargo, el uso de fs.readFile()

actualización: También existe la OS API que es probablemente mejor. Ejemplo de uso: Convert the output of os.cpus() in Node.js to percentage

+0

¡Muchas gracias! Encontré la manera de obtener la cantidad de memoria libre, pero todavía no puedo cargar la CPU en cada núcleo. Y .../proc/loadavg devuelve ceros. ¿Es normal? – brianconnoly

+1

Use os.loadavg() ;. Devolverá la carga total del servidor en 1 minuto, 5 minutos y 15 minutos en una matriz. – Licson

+0

+1 para la API del sistema operativo ... –

1

Puede probar os-usage que es un contenedor para el comando top.

Proporciona estadísticas como el uso de la CPU y el uso de la memoria. Ejemplo de uso:

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' } ] 
}); 
1

descarada plug - https://www.npmjs.com/package/microstats

también se puede configurar para alertar al usuario cuando el espacio de disco, CPU o la memoria cruces de umbral definido por el usuario. funciona para linux, macOS y windows.

Cuestiones relacionadas