Você pode tentar o sysmon . Embora não seja tão sofisticado quanto o Glances, é muito direto e fácil de usar.
Se você deseja se sujar e criar scripts em python, aqui estão alguns princípios básicos do monitoramento do sistema com Python para você começar.
Você precisará de um módulo externo chamado psutil
para monitorar a maioria das coisas. É mais fácil usar um instalador de módulo externo em vez de construir a partir da fonte.
Nota: Estes exemplos estão escritos em Python 2.7
sudo apt-get install pip
sudo pip install psutil
Agora que temos os módulos instalados, podemos começar a codificar.
Primeiro, crie um arquivo chamado usage.py
.
gedit ~/usage.py
Comece importando psutil
import psutil
Em seguida, crie uma função para monitorar a porcentagem em que seus núcleos de CPU estão executando.
def cpu_perc():
cpu_perc = psutil.cpu_percent(interval=1, percpu=True)
for i in range(len(cpu_perc)):
print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%"
Vamos detalhar um pouco, certo?
A primeira linha cpu_num = psutil.cpu_percent(interval=1, percpu=True)
,, localiza a porcentagem em que os núcleos da CPU estão sendo executados e a atribui a uma lista chamada cpu_perc
.
Esse loop aqui
for i in range(len(cpu_num)):
print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%"
é um loop for que imprime a porcentagem atual de cada um dos núcleos da CPU.
Vamos adicionar o uso da RAM.
Crie uma função chamada ram_perc
.
def ram_perc():
mem = psutil.virtual_memory()
mem_perc = mem.percent
print "RAM: ", mem_perc, "%"
psutil.virtual_memory
fornece um conjunto de dados contendo fatos diferentes sobre a RAM do seu computador.
Em seguida, você pode adicionar alguns fatos sobre sua rede.
def net():
net = psutil.net_io_counters()
mbytes_sent = float(net.bytes_sent) / 1048576
mbytes_recv = float(net.bytes_recv) / 1048576
print "MB sent: ", mbytes_sent
print "MB received: ", mbytes_recv
Como psutil.net_io_counters()
apenas nos fornece informações sobre pacotes enviados e recebidos em bytes, foi necessária alguma conversão.
Para obter algumas informações sobre o espaço de troca, adicione esta função.
def swap_perc():
swap = psutil.swap_memory()
swap_perc = swap.percent
Este é bem direto.
A temperatura é meio difícil de fazer; portanto, você pode precisar fazer algumas pesquisas para descobrir o que funcionará com o seu hardware. Você terá que exibir o conteúdo de um determinado arquivo.
O uso do disco é muito mais fácil que a temperatura. Tudo que você precisa fazer é passar o disco que você deseja monitorar (ou seja:) /
através de uma determinada função.
def disks():
if len(sys.argv) > 1:
for disk in range(1, len(sys.argv)):
tmp = psutil.disk_usage(sys.argv[disk])
print sys.argv[disk], "\n"
print "Megabytes total: ",
print str(float(tmp.total) / 1048576)
print "Megabytes used: ",
print str(float(tmp.used) / 1048576)
print "Megabytes free: ",
print str(float(tmp.free) / 1048576)
print "Percentage used: ",
print tmp.percent, "\n"
A saída original psutil.disk_usage
é essa,
>>>psutil.disk_usage('/')
sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
mas você também pode apenas receber total
, used
, free
, ou percent
.
O programa completo: (as funções acima mencionadas foram combinadas)
import psutil, os, sys
mem_perc = 0 #init var
swap_perc = 0 #init var
mbytes_sent = 0 #init var
mbytes_recv = 0 #init var
cpu_perc = 0 #init var
swap = 0 #init var
mem = 0 #init var
net = 0 #init var
def disp(degree):
global cpu_perc
global swap
global swap_perc
global mem
global mem_perc
global net
global mbytes_sent
global mbytes_recv
cpu_perc = psutil.cpu_percent(interval=1, percpu=True)
swap = psutil.swap_memory()
swap_perc = swap.percent
mem = psutil.virtual_memory()
mem_perc = mem.percent
net = psutil.net_io_counters()
mbytes_sent = float(net.bytes_sent) / 1048576
mbytes_recv = float(net.bytes_recv) / 1048576
os.system('clear') #clear the screen
print "-"*30
print "CPU"
print "-"*30
print "CPU Temperature: " , degree, "'C"
for i in range(len(cpu_perc)):
print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%"
print "-"*30
print "MEMORY"
print "-"*30
print "RAM: ", mem_perc, "%"
print "Swap: ", swap_perc, "%"
print "-"*30
print "NETWORK"
print "-"*30
print "MB sent: ", mbytes_sent
print "MB received: ", mbytes_recv
print "-"*30
print "DISKS"
print "-"*30
if len(sys.argv) > 1:
for disk in range(1, len(sys.argv)):
tmp = psutil.disk_usage(sys.argv[disk])
print sys.argv[disk], "\n"
print "Megabytes total: ",
print str(float(tmp.total) / 1048576)
print "Megabytes used: ",
print str(float(tmp.used) / 1048576)
print "Megabytes free: ",
print str(float(tmp.free) / 1048576)
print "Percentage used: ",
print tmp.percent, "\n"
def main():
print("Press Ctrl+C to exit")
while True:
temp = open("/sys/class/thermal/thermal_zone0/temp").read().strip().lstrip('temperature :').rstrip(' C')
temp = float(temp) / 1000
disp(temp)
main()
A linha temp = open("/sys/class/thermal/thermal_zone0/temp").read().strip().lstrip('temperature :').rstrip(' C')
pode não funcionar com sua configuração de hardware.
Execute este programa na linha de comando. Passe os discos que você deseja monitorar como argumentos na linha de comando.
$ python usage.py /
Press Ctrl+C to exit
------------------------------
CPU
------------------------------
CPU Temperature: 39.0 'C
CPU Core 1 : 4.8 %
CPU Core 2 : 1.0 %
CPU Core 3 : 0.0 %
CPU Core 4 : 4.9 %
------------------------------
MEMORY
------------------------------
RAM: 33.6 %
Swap: 6.4 %
------------------------------
NETWORK
------------------------------
MB sent: 2.93382358551
MB received: 17.2131490707
------------------------------
DISKS
------------------------------
/
Megabytes total: 13952.484375
Megabytes used: 8542.6640625
Megabytes free: 4678.5703125
Percentage used: 61.2
/media/calvin/Data
Megabytes total: 326810.996094
Megabytes used: 57536.953125
Megabytes free: 269274.042969
Percentage used: 17.6
Espero que isto ajude! Comente se você tiver alguma dúvida.
https://github.com/calthecoder/sysmon-1.0.1