服务器资源监测脚本(网卡、MEM、CPU)

#-*- coding: utf-8 -*- 
#!/usr/bin/python 

'''
用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
 
主选项和报告:
    -b    I/O 和传输速率信息状况
    -B    分页状况
    -d    块设备状况
    -I { <中断> | SUM | ALL | XALL }  中断信息状况
    -m    电源管理信息状况
    -n { <关键词> [,...] | ALL }  网络统计信息
        关键词可以是: 
            DEV         网卡信息统计
            EDEV     网卡的错误统计
            NFS         NFS客户端
            NFSD     NFS服务器
            SOCK     Sockets (IPV4套接字)
            IP         IP流(IPV4)
            EIP         IP流的错误统计(IPV4)
            ICMP     ICMP流(IPV4)
            EICMP     ICMP流的错误统计(IPV4)
            TCP         TCP流(IPV4)
            ETCP     TCP流的错误统计(IPV4) 
            UDP         UDP流(IPV4)
            SOCK6     Sockets(IPV6套接字)
            IP6         IP流(IPV6)
            EIP6     IP流的错误统计(IPV6)
            ICMP6     ICMP流(IPV6)
            EICMP6   ICMP流的错误统计 (IPV6) 
            UDP6     UDP流(IPV6) 
    -q    队列长度和平均负载
    -r    内存利用率
    -R    内存状况
    -S    交换空间利用率
    -u [ ALL ]
        CPU 利用率
    -v    Kernel table 状况
    -w    任务创建与系统转换统计信息
    -W    交换信息
    -y    TTY 设备状况
    -o {<文件路径>}
       将命令结果以二进制格式存放在指定文件中       
'''        
#sar命令使用方法详细请自查

import paramiko




class Remote_management_WayKind():
    def __init__(self,Load_list):
        #将列表中登录参数,传递给SSH登录封装类       
        self.host_addr= Load_list[0]
        self.user_name=Load_list[1]
        self.ssh_loadkey=Load_list[2]
        self.execmd=Load_list[3]
               
        self.back_normal_info=''
        

    def Command_Way(self):
        #创建SSH连接日志文件
        paramiko.util.log_to_file("paramiko.log") 
        # 创建SSH对象
        ssh_load = paramiko.SSHClient()
        # 允许连接不在know_hosts文件中的主机
        ssh_load.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 连接服务器
        ssh_load.connect(hostname=self.host_addr, port=22, username=self.user_name, password=self.ssh_loadkey) 
        # 执行命令 
        stdin, stdout, stderr = ssh_load.exec_command (self.execmd,bufsize=1) #execmd传的参数free也是命令
             
        #stderr.channel.set_combine_stderr(stdout)
                
        #打开屏幕打印log文件,如果没有便新创建,模式a+为追加模式
        log_file = open("message.log", "a+")
        counter=0
        while True:
                      
            self.back_normal_info = stdout.readline()
            
            counter+=1
            
            if len(self.back_normal_info) == 0:
                break
            print(str(self.back_normal_info.strip()))
            
            #写入信息
            log_file.writelines(self.back_normal_info)
#关闭屏幕打印log文件 log_file.close() return stdout.channel.recv_exit_status() #返回错误信息 back_erro= stderr.readline() print(back_erro) # 关闭连接 ssh_load.close() if __name__=='__main__': Load_list = ['IP','用户名','密码','sar -n DEV 1 -u -r'] Ssh_load=Remote_management_WayKind(Load_list) Ssh_load.Command_Way()

 

posted @ 2022-04-20 14:42  No九五二七9527  阅读(156)  评论(0)    收藏  举报