2018-05-11 利用paramiko和psutil远程监控

作者: 止一量化养家 | 来源:发表于2018-05-12 08:22 被阅读61次

    1 环境准备

    在需要监控的服务器上:

    a.安装openssh或者mobassh
    b.安装Python
    c.安装psutil (pip install psutil)
    d.确保本地与远程机器的22端口的连通

    2 执行文件准备

    例如下面的代码主要监控CPU、内存和硬盘的信息:

    # -*- coding:utf-8 -*-
    
    import json
    import psutil as pu
    result = {}
    mem = pu.virtual_memory()
    result["内存使用率"] = "%.2f%%"%mem.percent
    result["CPU使用率"] = "%.2f%%"%pu.cpu_percent(interval = 2)
    for id in pu.disk_partitions():
        if id.opts != 'cdrom':
            disk_name = id.device.split(':')[0]
            disk_info = pu.disk_usage(id.device)
            disk_pct = "%.2f%%"%disk_info.percent
            result["硬盘%s使用率"%disk_name] = disk_pct
    data = json.dumps(result)
    print(data)
    

    执行的结果如下:

    将代码保存到文件:monitor.txt

    3 监控远程服务器信息

    3.1 设置服务器的参数

    这里根据实际情况确定:

    #远程服务器参数
    port=22
    IP="192.168.159.129"
    username="administrator"
    password="123456"
    

    3.2 执行文件

    # 文件名称
    local_path = os.getcwd() # 读取当前目录
    remote_path = 'C:/python27/'
    name = 'monitor.txt'
    
    local_name = os.path.join(local_path, name)
    remote_name = os.path.join(remote_path, name)
    

    其中local_name是本地包含路径的文件全称,remote_name 是需要放到远程服务器的包含路径的文件全称。

    3.3 上传代码

    # 建立sftp连接
    transport = paramiko.Transport((IP,22))
    transport.connect(username=username,password=password)
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 上传文件
    sftp.put(local_name,remote_name)
    # 关闭连接
    transport.close()
    

    3.4 执行监控

    # 建立ssh连接
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(IP,port,username, password)
    ##执行命令
    cmd = '{0}python.exe {1}'.format(remote_path,remote_name)
    stdin, stdout, stderr = ssh.exec_command(cmd)
    # 读取信息
    line_list = stdout.readlines()
    # 关闭连接
    ssh.close()
    

    这里需要执行的命令其实是:

    'C:/python27/python.exe C:/python27/monitor.txt'

    因为C:/python27是Python安装的目录,在没有配置环境变量的情况下,通过这样的方式可以直接执行。

    3.5 打印信息

    data = json.loads(line_list[0])
    result_df = pd.Series(data).to_frame('监控信息')
    print(result_df)
    

    打印结果如下:

    3.6 附上代码

    import paramiko
    import os
    import psutil as pu
    import json
    import pandas as pd
    
    # 远程服务器参数
    port=22
    IP="192.168.159.129"
    username="administrator"
    password="123456"
    
    # 文件名称
    local_path = os.getcwd() # 读取当前目录
    remote_path = 'C:/python27/'
    name = 'monitor.txt'
    local_name = os.path.join(local_path, name)
    remote_name = os.path.join(remote_path, name)
    
    # 建立sftp连接
    transport = paramiko.Transport((IP,22))
    transport.connect(username=username,password=password)
    sftp = paramiko.SFTPClient.from_transport(transport)
    ##上传文件
    sftp.put(local_name,remote_name)
    ##关闭连接
    transport.close()
    
    # 建立ssh连接
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(IP,port,username, password)
    ##执行命令
    cmd = '{0}python.exe {1}'.format(remote_path,remote_name)
    stdin, stdout, stderr = ssh.exec_command(cmd)
    ##读取信息
    line_list = stdout.readlines()
    ##关闭连接
    ssh.close()
    
    # 打印信息
    data = json.loads(line_list[0])
    result_df = pd.Series(data).to_frame('监控信息')
    
    print (result_df)
    

    相关文章

      网友评论

        本文标题:2018-05-11 利用paramiko和psutil远程监控

        本文链接:https://www.haomeiwen.com/subject/lrqqdftx.html