#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:Eli
# datetime:2021/8/16 10:25
# software: PyCharm
import os, time
import logging
logging.basicConfig(level=logging.DEBUG,#控制台打印的日志级别
filename='monitor.log',
filemode='a',##模式,有w和a,w就是写模式,每次都会重新写日志,覆盖之前的日志
#a是追加模式,默认如果不写的话,就是追加模式
format=
'%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
#日志格式
)
last_worktime = 0
last_idletime = 0
def get_cpu():
global last_worktime, last_idletime
f = open("/proc/stat", "r")
line = ""
while not "cpu " in line: line = f.readline()
f.close()
spl = line.split(" ")
worktime = int(spl[2]) + int(spl[3]) + int(spl[4])
idletime = int(spl[5])
dworktime = (worktime - last_worktime)
didletime = (idletime - last_idletime)
rate = float(dworktime) / (didletime + dworktime)
last_worktime = worktime
last_idletime = idletime
if (last_worktime == 0): return 0
return rate
def get_mem_usage_percent():
try:
f = open('/proc/meminfo', 'r')
for line in f:
if line.startswith('MemTotal:'):
mem_total = int(line.split()[1])
elif line.startswith('MemFree:'):
mem_free = int(line.split()[1])
elif line.startswith('Buffers:'):
mem_buffer = int(line.split()[1])
elif line.startswith('Cached:'):
mem_cache = int(line.split()[1])
elif line.startswith('SwapTotal:'):
vmem_total = int(line.split()[1])
elif line.startswith('SwapFree:'):
vmem_free = int(line.split()[1])
else:
continue
f.close()
except:
return None
physical_percent = usage_percent(mem_total - (mem_free + mem_buffer + mem_cache), mem_total)
virtual_percent = 0
if vmem_total > 0:
virtual_percent = usage_percent((vmem_total - vmem_free), vmem_total)
return physical_percent, virtual_percent
def usage_percent(use, total):
try:
ret = (float(use) / total) * 100
except ZeroDivisionError:
raise Exception("ERROR - zero division error")
return ret
def go(logfile=""):
statvfs = os.statvfs('/')
total_disk_space = statvfs.f_frsize * statvfs.f_blocks
free_disk_space = statvfs.f_frsize * statvfs.f_bfree
disk_usage = (total_disk_space - free_disk_space) * 100.0 / total_disk_space
disk_usage = int(disk_usage)
disk_tip = "硬盘空间使用率(最大100%):" + str(disk_usage) + "%"
# print(disk_tip)
logging.info(disk_tip)
mem_usage = get_mem_usage_percent()
mem_usage = int(mem_usage[0])
mem_tip = "物理内存使用率(最大100%):" + str(mem_usage) + "%"
# print(mem_tip)
logging.info(mem_tip)
cpu_usage = int(get_cpu() * 100)
cpu_tip = "CPU使用率(最大100%):" + str(cpu_usage) + "%"
# print(cpu_tip)
logging.info(cpu_tip)
load_average = os.getloadavg()
load_tip = "系统负载(三个数值中有一个超过3就是高):" + str(load_average)
# print(load_tip)
logging.info(load_tip)
if __name__ == '__main__':
logfile = "$HOME"
while True:
go(logfile)
time.sleep(30) # 每30s统计一次