云服务器的内存和cpu利用率的监测记录

Zss 发表于:

想着之后写一个简单的web监控的网页,用来检测这个云服务器的cpu和内存的利用情况,最后生成一个图表来显示

所以得先从数据入手了,没有用到数据库来存放数据,所以就直接将大概七天的数据分别写在了两个文本文件中

为之后的监测图表的生成提供数据,在liunx中编写的,之后再使用flask搭建一个简单的web,其实感觉使用vim来编写python还是很舒服的

主要是要对代码很熟悉,不然没了补全就很多词写错了,应当使用两个线程来分别记录cpu和内存的情况,之后再改一下

将数据存在在data文件夹中,数据的存放格式中间使用符号–>来分割,到时候读取时使用split方便分割

再者当文件大于七天的数据量的时候,会将其文件作为old文件来备份

 

#!/home/python/venv/bin/python
#coding:utf-8
from subprocess import *
import os,time
from datetime import datetime

class Data():
    def __init__(self):
      self.data_path = os.getcwd() + '/data'
          if not os.path.exists(self.data_path):
          os.makedirs(self.data_path)
          self.cpuinfo_cmd = "mpstat 1 1|sed -n '4,4'p|awk '{print $1,$2,$13}'"
      self.meminfo_cmd = "free|grep 'Mem'|awk '{print $3,$4}'"

    def check_file_size(self,file_name):
      file_size_cmd = "ls -l %s/%s.txt|awk '{print $5}'"%(self.data_path,file_name)
      if os.path.isfile(self.data_path + '/%s.txt'%file_name):
          result = Popen(file_size_cmd,shell=True,stdout=PIPE)
          file_size = int(result.stdout.read())
          if file_size >= 19097280:#大概七天的cpu利用率的数据量
              os.rename(self.data_path + '/%s.txt'%file_name,self.data_path + '/%s-old.txt'%file_name)
   
    def get_cpu_info(self):
      result = Popen(self.cpuinfo_cmd,shell=True,stdout=PIPE)
      info = result.stdout.read().split()
      use_cpu = 100.00-float(info[2])
      if info[1] == 'PM':
          timeinfo = info[0].split(':')
          now_time = str(datetime.now().date()) + ' ' + str((int(timeinfo[0]) + 12)) + ':' +timeinfo[1] + ':' + timeinfo[2]
      else:
          now_time = info[0]
      with open(self.data_path + '/cpu.txt','a') as f:
               f.write(now_time + '-->' + str(use_cpu) + '-->' + str(info[2])  + '\n')
    
    def get_ram_info(self):
      result = Popen(self.meminfo_cmd,shell=True,stdout=PIPE)
           now_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
      info = result.stdout.read().split()
      meminfo = info[0][:-3] + '-->' + info[1][:-3] 
      with open(self.data_path + '/mem.txt','a') as f:
          f.write(now_time + '-->' + str(meminfo) + '\n')


if __name__ == '__main__':
    data = Data()
    while 1:
   data.check_file_size('cpu')
       data.get_cpu_info()
   data.check_file_size('mem')
        data.get_ram_info()