利用SSH远程监测内存使用率报警脚本

Zss 发表于:

不知道为什么我多次在liunx上安装twilio模块时总是报错,似乎是缺少一些的依赖,也就没有一直去解决这个问题

所以索性在win下面来远程连接linux来监测内存使用率来报警,如果是在liunx上直接在本机上跑个进程方便很多,也不需要远程来获取信息了

之前一直对于获取到的这些信息不是很好分割空格将自己需要的信息给挑选出来,使用自带的一些字符串方法也不是很好使,发现正则真的是好使

有空一定要学一学正则,真的很强大,把程序使用pyinstaller -F 打包成了一个exe,虽然开始运行的时候慢,但是还是挺方便的,还有paramiko这个模块也很好,可以再学学

call模块代码就是之前的利用twilio打电话

exe:监控内存

#coding:gbk
import paramiko
import time,re
from call_me import call
def main(data):
    host = data[0]
    port = data[1]
    uersname = data[2]
    password = data[3]
    error_ram = data[4]
    number = data[5]
    monitor_time = int(data[6])
    ssh = paramiko.SSHClient()         #调用paramiko模块下的SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host,port,username=uersname,password=password)
    while 1:
        time.sleep(monitor_time)
        a,s,d = ssh.exec_command('free')
        ram = s.read().split(':')[-2]
        total_ram = re.split(r'\s+',ram)[1]
        free_ram = re.split(r'\s+',ram)[2]
        cache_ram = re.split(r'\s+',ram)[5]
        free_percent = ((float(free_ram)+float(cache_ram))/float(total_ram))*100
        if free_percent >= float(error_ram):
            print('%s,当前内存占用率%.2f%%,报警阈值为:%.2f'%(time.strftime('%Y-%m-%d-%X'),float(free_percent),float(error_ram)))
            print('%s,正在拨打电话:%d'%(time.strftime('%Y-%m-%d-%X'),int(number)))
            call(number)
        else:
            print('%s,当前内存占用率%.2f%%,报警阈值为:%.2f'%(time.strftime('%Y-%m-%d-%X'),float(free_percent),float(error_ram)))

if __name__ == '__main__':
    print('格式:主机ip 端口 账号 密码 报警RAM阈值 被通知的电话号码 循环检测的时延单位:S')
    print('例如:192.168.99.16 22 username password 80 15655412325 2')
    host,port,name,word,error_ram,number,monitor_time= raw_input('').split()
    data = (host,port,name,word,error_ram,number,monitor_time)
    main(data)