Ви можете спробувати sysmon . Хоча не настільки вигадливий, як Glances, він дуже простий і простий у використанні.
Якщо ви хочете забруднитись і зробити трохи сценаріїв на python, ось деякі основи системного моніторингу з Python, щоб розпочати роботу.
Вам знадобиться зовнішній модуль psutil
для виклику більшості речей. Найпростіше використовувати зовнішній інсталятор модуля, а не будувати з джерела.
Примітка. Ці приклади написані в Python 2.7
sudo apt-get install pip
sudo pip install psutil
Тепер, коли у нас встановлені модулі, ми можемо почати кодування.
Спочатку створіть файл під назвою usage.py
.
gedit ~/usage.py
Почніть з імпорту psutil
import psutil
Потім створіть функцію для моніторингу відсотка, на якому працюють ядра CPU.
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]), "%"
Давайте трохи розберемо це, чи не так?
Перший рядок cpu_num = psutil.cpu_percent(interval=1, percpu=True)
знаходить відсоток, на якому працюють ядра у вашому процесорі, і призначає його до списку, який називається cpu_perc
.
Ця петля тут
for i in range(len(cpu_num)):
print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%"
це цикл for, який виводить поточний відсоток кожного з ваших процесорних ядер.
Додамо використання оперативної пам'яті.
Створіть функцію під назвою ram_perc
.
def ram_perc():
mem = psutil.virtual_memory()
mem_perc = mem.percent
print "RAM: ", mem_perc, "%"
psutil.virtual_memory
надає набір даних, що містять різні факти про оперативну пам'ять на вашому комп'ютері.
Далі ви можете додати деякі факти про вашу мережу.
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
Оскільки psutil.net_io_counters()
нам надається лише інформація про надіслані та отримані пакети в байтах, деяке перетворення було необхідним.
Щоб отримати деяку інформацію про обмінний простір, додайте цю функцію.
def swap_perc():
swap = psutil.swap_memory()
swap_perc = swap.percent
Цей досить простий.
Температуру важко зробити, тому вам може знадобитися зробити власне дослідження, щоб зрозуміти, що буде працювати з вашим обладнанням. Вам доведеться відобразити вміст певного файлу.
Використання диска набагато простіше, ніж температура. Все, що вам потрібно зробити, - це передати диск, який ви хочете контролювати (тобто:) /
через певну функцію.
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"
Початковий вихід psutil.disk_usage
цього,
>>>psutil.disk_usage('/')
sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
але ви також можете просто отримати total
, used
, free
або percent
.
Виконана програма: (вищезазначені функції були об'єднані)
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()
Рядок temp = open("/sys/class/thermal/thermal_zone0/temp").read().strip().lstrip('temperature :').rstrip(' C')
може не працювати з вашою апаратною конфігурацією.
Запустіть цю програму з командного рядка. Передайте диски, які ви хочете контролювати, як аргументи з командного рядка.
$ 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
Сподіваюся, це допомагає! Прокоментуйте, якщо у вас є якісь питання.
https://github.com/calthecoder/sysmon-1.0.1