#!/usr/bin/python # -*- coding: utf8 -*- import time import os import smtplib from email.mime.text import MIMEText # get date,time,timespace def getTime(): todayTime = [] timpeStamp=int(time.time()) timeDate = time.strftime("%Y-%m-%d",time.localtime(timpeStamp)) timeTime = time.strftime("%H:%M:%S",time.localtime(timpeStamp)) todayTime = [timpeStamp,timeDate,timeTime] return todayTime # get system load 1min 5min 15min def getLoad(): filepath = ‘/proc/loadavg‘ sysload = [] f = open(filepath) loadinfo = f.read() f.close() sysload = loadinfo.split()[0:3] return sysload # get memory used def getMemUsed(): filepath = ‘/proc/meminfo‘ mem = {} mem_f = open(filepath) meminfo = mem_f.readlines() mem_f.close() for line in meminfo: name,value = line.split(‘:‘)[0],int(line.split(‘:‘)[1].split()[0]) mem[name]=value mem[‘Used‘] = mem[‘MemTotal‘]-mem[‘MemFree‘]-mem[‘Buffers‘]-mem[‘Cached‘] mem[‘Used_per‘] = round((float(mem[‘Used‘])/mem[‘MemTotal‘]*100),2) return mem[‘Used_per‘] # get network traffic rz and tx speed def getNetTraffic(): filepath = ‘/proc/net/dev‘ interface = ‘eth0‘ traffic = {} trafficOld_f = open(filepath) trafficinfo =trafficOld_f.readlines() trafficOld_f.close() for line in trafficinfo: if interface in line: traffic[‘rx_value_old‘],traffic[‘tx_value_old‘] = line.split(‘:‘)[1].split()[0],line.split(‘:‘)[1].split()[8] time.sleep(1) trafficNew_f = open(filepath) trafficinfo = trafficNew_f.readlines() trafficNew_f.close() for line in trafficinfo: if interface in line: traffic[‘rx_value_new‘],traffic[‘tx_value_new‘] = line.split(‘:‘)[1].split()[0],line.split(‘:‘)[1].split()[8] rxspeed = round((int(traffic[‘rx_value_new‘])-int(traffic[‘rx_value_old‘]))/1024,5) txspeed = round((int(traffic[‘tx_value_new‘])-int(traffic[‘tx_value_old‘]))/1024,5) return [rxspeed,txspeed] # get socket number by the spefic def getSocketNum(): socketinfo=os.popen(‘ss -an‘).readlines() port = ‘22‘ status = ‘ESTAB‘ socketNum = 0 for socket in socketinfo: if status in socket: if port in socket.split()[3].split(‘:‘)[1]: socketNum += 1 return socketNum # flatten the list def flatten(l): for el in l: if hasattr(el, "__iter__") and not isinstance(el, basestring): for sub in flatten(el): yield sub else: yield el # write the info to log def writeLog(): logfilepath=‘/var/log/syscheck.log‘ sysrecord = [] sysrecord.append(getTime()) sysrecord.append(getLoad()) sysrecord.append(getMemUsed()) sysrecord.append(getNetTraffic()) sysrecord.append(getSocketNum()) sysrecordinfo = ‘,‘.join([str(x) for x in flatten(sysrecord)])+‘\n‘ log_f = open(logfilepath,‘aw‘) log_f.write(sysrecordinfo) log_f.close() # send Message def sendMessage(receiver,message): host = ‘smtp.gmail.com‘ port = 465 sender = ‘ccc@gmail.com‘ pwd = ‘ppp‘ msg = MIMEText(message) msg[‘subject‘] = ‘Server Alert‘ msg[‘from‘] = sender msg[‘to‘] = receiver s = smtplib.SMTP_SSL(host,port) s.login(sender,pwd) s.set_debuglevel(1) s.sendmail(sender,receiver,msg.as_string()) s.quit # send the mail list def mailSender(message): tosendlist=[‘111@136.com‘,‘bbb@139.com‘] for receiver in tosendlist: sendMessage(receiver,message) datetime = getTime() sysload = getLoad() memused = getMemUsed() nettraffic = getNetTraffic() socketnum = getSocketNum() writeLog() sys = {} sys[‘loadcritical‘] = 8 sys[‘memcritical‘] = 95 sys[‘speedcritical‘] = 1000*1024/8*0.8 #千兆网卡1000Mb/s 换算成 KB sys[‘socketnumcri‘] = 950 altermsg = ‘‘ if float(sysload[0]) >= sys[‘loadcritical‘]: altermsg = ‘sysLoad: ‘+str(sysload[0])+‘\n‘ if int(memused) >= sys[‘memcritical‘]: altermsg += ‘memUsed: ‘+str(memused)+‘\n‘ if int(nettraffic[0]) >= sys[‘speedcritical‘]: altermsg += ‘rxSpeed: ‘+str(nettraffic[0])+‘\n‘ if int(nettraffic[1]) >= sys[‘speedcritical‘]: altermsg += ‘txSpeed: ‘+str(nettraffic[0])+‘\n‘ if int(socketnum) >= sys[‘socketnumcri‘]: altermsg += ‘socketNum: ‘+str(socketnum)+‘\n‘ if altermsg.strip() !=‘‘: mailSender(altermsg) else: print ‘altermsg is null‘
系统状态检查,包含了内存使用\系统负载\网卡流量\指定端口的连接数量\
包含计入csv格式日志功能,系统超载发送邮件功能.
本文出自 “逆寒” 博客,请务必保留此出处http://jianye.blog.51cto.com/4302590/1570263
原文地址:http://jianye.blog.51cto.com/4302590/1570263