亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Python > 正文

詳解用Python實現自動化監控遠程服務器

2024-09-09 19:02:07
字體:
來源:轉載
供稿:網友

最近發現Python課器做很多事情,在監控服務器有其獨特的優勢,耗費資源少,開發周期短。

首先我們做一個定時或者實時腳本timedtask.py,讓其定時監控目標服務器,兩種方式:

第一種:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time  : 2017/11/27 15:59# @Desc  : 定時任務,以需要的時間間隔執行某個命令# @File  : timedtask.py# @Software: PyCharm import time, osfrom monitorserver import alltask  def roll_back(cmd, inc = 60):  while True:    #執行方法,函數    alltask()    time.sleep(inc) roll_back("echo %time%", 5)

第二種:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time  : 2017/11/27 15:59# @Desc  : 定時任務,以需要的時間間隔執行某個命令# @File  : timedtask.py# @Software: PyCharm import time, os def roll_back(cmd, inc = 60):  while True:    #監控代碼文件所在位置    os.system('python /home/../monitorserver.py');    time.sleep(inc) roll_back("echo %time%", 5)

做過監控應該都知道,我們主要監控服務器,負載均衡、磁盤、內存、CPU、網絡接口(流量)、端口代碼,主要針對這些,我做了以下遠程監控,第一種和第二種監控代碼一樣,代碼monitorserver.py如下:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time  : 2017/11/27 15:59# @Desc  : 服務器監控代碼# @File  : monitorserver.py# @Software: PyCharm import pexpectimport re import timeimport threading """主方法127.0.0.1#遠程服務器ip地址"""def ssh_command(user, host, password, command):  ssh_new_key = 'Are you sure you want to continue connecting'  child = pexpect.spawn('ssh -l %s %s %s' % (user, host, command))  i = child.expect([pexpect.TIMEOUT, ssh_new_key, 'password: '])  if i == 0:    print 'ERROR!'    print 'SSH could not login. Here is what SSH said:'    print child.before, child.after    return None  if i == 1:    child.sendline('yes')    child.expect('password: ')    i = child.expect([pexpect.TIMEOUT, 'password: '])    if i == 0:      print 'ERROR!'      print 'SSH could not login. Here is what SSH said:'      print child.before, child.after      return None  child.sendline(password)  return child  """內存監控"""def mem_info():   child = ssh_command("遠程服務器用戶名", "127.0.0.1", "遠程服務器密碼", "cat /proc/meminfo")  child.expect(pexpect.EOF)  mem = child.before  mem_values = re.findall("(/d+)/ kB", mem)  MemTotal = mem_values[0]  MemFree = mem_values[1]  Buffers = mem_values[2]  Cached = mem_values[3]  SwapCached=mem_values[4]  SwapTotal = mem_values[13]  SwapFree = mem_values[14]  print '******************************內存監控*********************************'  print "*******************時間:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************"  print "總內存:",MemTotal  print "空閑內存:", MemFree  print "給文件的緩沖大小:",Buffers  print "高速緩沖存儲器使用的大小:", Cached  print "被高速緩沖存儲用的交換空間大小:", SwapCached  print "給文件的緩沖大小:", Buffers  if int(SwapTotal) == 0:    print u"交換內存總共為:0"  else:    Rate_Swap = 100 - 100*int(SwapFree)/float(SwapTotal)    print u"交換內存利用率:", Rate_Swap  Free_Mem = int(MemFree) + int(Buffers) + int(Cached)  Used_Mem = int(MemTotal) - Free_Mem  Rate_Mem = 100*Used_Mem/float(MemTotal)  print u"內存利用率:", str("%.2f" % Rate_Mem), "%"  """內核線程、虛擬內存、磁盤、陷阱和 CPU 活動的統計信息"""def vm_stat_info():  child = ssh_command("遠程服務器用戶名", "127.0.0.1", "遠程服務器密碼", "vmstat 1 2 | tail -n 1")  child.expect(pexpect.EOF)  vmstat_info = child.before.strip().split()  processes_waiting = vmstat_info[0]  processes_sleep = vmstat_info[1]  swpd = vmstat_info[2]  free = vmstat_info[3]  buff = vmstat_info[4]  cache = vmstat_info[5]  si = vmstat_info[6]  so = vmstat_info[7]  io_bi = vmstat_info[8]  io_bo = vmstat_info[9]  system_interrupt = vmstat_info[10]  system_context_switch = vmstat_info[11]  cpu_user = vmstat_info[12]  cpu_sys = vmstat_info[13]  cpu_idle = vmstat_info[14]  cpu_wait = vmstat_info[15]  st=vmstat_info[16]  print '****************************內核線程、虛擬內存、磁盤、陷阱和 CPU 活動的統計信息監控****************************'  print "*******************時間:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************"  print "等待運行進程的數量:", processes_waiting  print "處于不間斷狀態的進程:", processes_sleep  print "使用虛擬內存(swap)的總量:", swpd  print "空閑的內存總量:", free  print "用作緩沖的內存總量:", buff  print "用作緩存的內存總量:", cache  print "交換出內存總量 :", si  print "交換入內存總量 :", so  print "從一個塊設備接收:", io_bi  print "發送到塊設備:", io_bo  print "每秒的中斷數:", system_interrupt  print "每秒的上下文切換數:", system_context_switch  print "用戶空間上進程運行的時間百分比:", cpu_user  print "內核空間上進程運行的時間百分比:", cpu_sys  print "閑置時間百分比:", cpu_idle  print "等待IO的時間百分比:", cpu_wait  print "從虛擬機偷取的時間百分比:", st  '''cpu監控'''def cpu_info():  child = ssh_command("遠程服務器用戶名", "127.0.0.1", "遠程服務器密碼", "cat /proc/cpuinfo")  child.expect(pexpect.EOF)  cpuinfo = child.before  cpu_num = re.findall('processor.*?(/d+)', cpuinfo)[-1]  cpu_num = str(int(cpu_num) + 1)  print '***************************************cpu監控***************************************'  print "*******************時間:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************"  print u"CPU數目:", cpu_num  li = cpuinfo.replace('/t', '').split('/r')  CPUinfo = {}  procinfo = {}  nprocs = 0  for line in li:    if line.find("processor") > -1:      CPUinfo['CPU%s' % nprocs] = procinfo      nprocs = nprocs + 1    else:      if len(line.split(':')) == 2:        procinfo[line.split(':')[0].strip()] = line.split(':')[1].strip()      else:        procinfo[line.split(':')[0].strip()] = ''  for processor in CPUinfo.keys():    print "CPU屬于的名字及其編號、標稱主頻:",CPUinfo[processor]['model name']    print "CPU屬于其系列中的哪一代的代號:", CPUinfo[processor]['model']    print "CPU制造商:", CPUinfo[processor]['vendor_id']    print "CPU產品系列代號:", CPUinfo[processor]['cpu family']    print "CPU的實際使用主頻:", CPUinfo[processor]['cpu MHz']  """負載均衡"""def load_stat():  child = ssh_command("遠程服務器用戶名", "127.0.0.1", "遠程服務器密碼", "cat /proc/loadavg")  child.expect(pexpect.EOF)  loadavgs = child.before.strip().split()  print '************************負載均衡監控****************************'  print "*******************時間:",time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),"******************"  print "系統5分鐘前的平均負載:", loadavgs[0]  print "系統10分鐘前的平均負載:", loadavgs[1]  print "系統15分鐘前的平均負載:", loadavgs[2]  print "分子是正在運行的進程數,分母為總進程數:",loadavgs[3]  print "最近運行的進程id:", loadavgs[4]   """獲取網絡接口的輸入和輸出"""def ionetwork():  child = ssh_command("遠程服務器用戶名", "127.0.0.1", "遠程服務器密碼", "cat /proc/net/dev")  child.expect(pexpect.EOF)  netdata = child.before  li = netdata.strip().split('/n')  print '************************獲取網絡接口的輸入和輸出監控****************************'  print "*******************時間:",time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),"******************"  net = {}  for line in li[2:]:    line = line.split(":")    eth_name = line[0].strip()    # if eth_name != 'lo':    net_io = {}    net_io['Receive'] = round(float(line[1].split()[0]) / (1024.0 * 1024.0), 2)    net_io['Transmit'] = round(float(line[1].split()[8]) / (1024.0 * 1024.0), 2)    net[eth_name] = net_io  print net  """ 磁盤空間監控"""def disk_stat():  child = ssh_command("遠程服務器用戶名", "127.0.0.1", "遠程服務器密碼", "df -h")  child.expect(pexpect.EOF)  disk = child.before  disklist = disk.strip().split('/n')  disklists=[]  for disk in disklist:    disklists.append(disk.strip().split())  print '************************磁盤空間監控****************************'  print "*******************時間:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************"  for i in disklists[1:]:    print "/t文件系統:", i[0],    print "/t容量:", i[1],    print "/t已用:", i[2],    print "/t可用:", i[3],    print "/t已用%掛載點:", i[4]  """ 端口監控一般是遠程服務器用戶名用戶"""def getComStr():  child = ssh_command("遠程服務器用戶名", "127.0.0.1", "遠程服務器密碼", "netstat -tpln")  child.expect(pexpect.EOF)  Com = child.before  print '******************************端口監控*********************************'  print "*******************時間:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************"  print Com   """獲取網絡接口的輸入和輸出"""def cpu():  child = ssh_command("遠程服務器用戶名", "127.0.0.1", "遠程服務器密碼", 'cat /proc/stat | grep "cpu "')  child.expect(pexpect.EOF)  child1 = ssh_command("遠程服務器用戶名", "127.0.0.1", "遠程服務器密碼", 'cat /proc/stat | grep "cpu "')  child1.expect(pexpect.EOF)  cpus = child.before.strip().split()  cpus1 = child1.before.strip().split()  print '************************cpu使用情況****************************'  print "*******************時間:",time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),"******************"  T1=int(cpus[1])+int(cpus[2])+int(cpus[3])+int(cpus[4])+int(cpus[5])+int(cpus[6])+int(cpus[8])+int(cpus[9])  T2=int(cpus1[1]) + int(cpus1[2]) + int(cpus1[3]) + int(cpus1[4] )+ int(cpus1[5] )+int( cpus1[6] )+ int(cpus1[8] )+ int(cpus1[9])  Tol=T2-T1  Idle=int(cpus1[4]) - int(cpus[4])  print '總的cpu時間1:',T1  print '總的cpu時間2:', T2  print '時間間隔內的所有時間片:', Tol  print '計算空閑時間idle:', Idle  print "計算cpu使用率:",100*(Tol-Idle)/Tol,"%" """第一種執行"""def alltask():  try:    threads = []    t1 = threading.Thread(target=mem_info)    threads.append(t1)    t2 = threading.Thread(target=vm_stat_info)    threads.append(t2)    t3 = threading.Thread(target=cpu_info)    threads.append(t3)    t4 = threading.Thread(target=load_stat)    threads.append(t4)    t5 = threading.Thread(target=ionetwork)    threads.append(t5)    t6 = threading.Thread(target=disk_stat)    threads.append(t6)    t7 = threading.Thread(target=getComStr)    threads.append(t7)    t8 = threading.Thread(target=cpu)    threads.append(t8)    for n in range(len(threads)):      threads[n].start()  except Exception, e:    print str(e) """第二種執行"""if __name__ == '__main__':  try:    threads = []    t1 = threading.Thread(target=mem_info)    threads.append(t1)    t2 = threading.Thread(target=vm_stat_info)    threads.append(t2)    t3 = threading.Thread(target=cpu_info)    threads.append(t3)    t4 = threading.Thread(target=load_stat)    threads.append(t4)    t5 = threading.Thread(target=ionetwork)    threads.append(t5)    t6 = threading.Thread(target=disk_stat)    threads.append(t6)    t7 = threading.Thread(target=getComStr)    threads.append(t7)    t8 = threading.Thread(target=cpu)    threads.append(t8)    for n in range(len(threads)):      threads[n].start()  except Exception, e:    print str(e)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品国产三级国产专播精品人| 亚洲欧美国产另类| 97在线日本国产| 日韩电影大全免费观看2023年上| 欧美在线亚洲一区| 中文字幕无线精品亚洲乱码一区| 亚洲视频自拍偷拍| 欧美成人精品在线| 成人免费高清完整版在线观看| 成人网在线免费看| 亚洲黄色av女优在线观看| 91美女福利视频高清| 色yeye香蕉凹凸一区二区av| 亚洲最大在线视频| 9.1国产丝袜在线观看| 亚洲天堂影视av| 欧美wwwwww| 97香蕉超级碰碰久久免费的优势| 欧美激情综合色综合啪啪五月| 精品美女国产在线| 久久久免费电影| 欧美激情视频网| 国产日韩中文字幕| 久久精品视频一| 久久精品国产一区二区电影| 日韩av免费在线看| 秋霞成人午夜鲁丝一区二区三区| 日韩电影在线观看永久视频免费网站| 亚洲色图日韩av| 一区二区三区四区视频| 国产成人拍精品视频午夜网站| 国产999视频| 久久综合九色九九| 亚洲美女av在线播放| 高清欧美性猛交xxxx黑人猛交| 亚洲人成啪啪网站| 亚洲va欧美va国产综合久久| 国产日韩欧美在线| 日韩电影免费在线观看| 成人免费看黄网站| 色综合五月天导航| 久久国产精品久久久久| 久久综合久中文字幕青草| 日韩一区在线视频| 日韩国产精品亚洲а∨天堂免| 亚洲国产欧美一区二区丝袜黑人| 久久国产一区二区三区| 一区二区福利视频| 国语自产精品视频在线看抢先版图片| 日韩国产高清视频在线| 久久久天堂国产精品女人| 国产精品精品视频一区二区三区| 日韩成人激情在线| 91久久综合亚洲鲁鲁五月天| 亚洲成人网在线观看| 亚洲综合av影视| 欧美在线一区二区视频| 久久亚洲国产精品成人av秋霞| 欧美成人一二三| 亚洲欧洲在线看| 国产精品丝袜高跟| 亚洲免费视频在线观看| 日韩在线高清视频| 亚洲高清久久网| 日韩欧美国产中文字幕| 国产美女精品视频免费观看| 性色av一区二区三区| 国产精品免费电影| 欧美成人性生活| 久久精品久久久久久国产 免费| 韩国精品美女www爽爽爽视频| 欧美国产日韩精品| 欧美xxxx14xxxxx性爽| 色777狠狠综合秋免鲁丝| 亚洲视频在线观看网站| 欧美激情免费观看| 国产精品九九久久久久久久| 亚洲欧美国产高清va在线播| 欧美激情免费观看| 久久久噜噜噜久久| 日韩一级裸体免费视频| 欧美精品福利视频| 精品亚洲aⅴ在线观看| 精品亚洲一区二区| 在线成人免费网站| 最新91在线视频| 欧美日韩亚洲一区二| 国产欧美亚洲精品| 亚洲人成在线观看| 中文字幕一精品亚洲无线一区| 欧美在线视频观看| 国产男人精品视频| 成人福利在线观看| 中文字幕免费精品一区| 国产精品视频一区二区高潮| 亚洲日韩欧美视频一区| 亚洲欧美日本另类| 亚洲天堂第一页| 亚洲乱码国产乱码精品精| 亚洲日本中文字幕| 亚洲一区二区三区视频播放| 这里只有精品在线播放| 国产亚洲欧美aaaa| 热久久视久久精品18亚洲精品| 精品久久久精品| 日韩av影视综合网| 亚洲欧美日本另类| 色偷偷亚洲男人天堂| 久久免费视频这里只有精品| 亚洲肉体裸体xxxx137| 久久久精品国产亚洲| 欧美性jizz18性欧美| 国产成人综合av| 色视频www在线播放国产成人| 日韩久久午夜影院| 日韩视频免费看| 大量国产精品视频| 欧美一级淫片丝袜脚交| 精品中文字幕乱| 96sao精品视频在线观看| 国产日韩欧美夫妻视频在线观看| 日本伊人精品一区二区三区介绍| 欧美激情网友自拍| 91高清免费在线观看| 久久综合国产精品台湾中文娱乐网| 国产成+人+综合+亚洲欧洲| 久久夜色精品国产| 欧美亚洲第一页| 亚洲一区国产精品| 亚洲伊人成综合成人网| 国产精品黄色av| 欧美日韩另类在线| 国产日韩av在线| 一个色综合导航| 国产91网红主播在线观看| 午夜精品一区二区三区在线播放| 日本国产精品视频| 亚洲欧美日韩中文在线| 亚洲成人激情在线观看| 浅井舞香一区二区| 在线日韩日本国产亚洲| 91视频8mav| 久久久久这里只有精品| 欧美激情一区二区久久久| 欧美性videos高清精品| 国产精品中文久久久久久久| 美女视频黄免费的亚洲男人天堂| 亚洲黄色成人网| 国产欧美一区二区三区在线看| xxx欧美精品| 欧美大全免费观看电视剧大泉洋| 久久这里有精品视频| 欧美在线视频一区| 最近2019中文字幕第三页视频| 久久精视频免费在线久久完整在线看| 57pao国产精品一区| 日韩福利视频在线观看| 欧美中文在线视频| 91精品国产沙发| 成人免费视频网| 久久香蕉精品香蕉| 久久男人资源视频| 久久99热精品这里久久精品| 久久青草福利网站|