• 自动化运维:使用psutil和paramiko读取远程主机信息


    1.前言 

         今天大致看了下自动化运维的东西,里面介绍到了psutil模块,其封装了linux 下的大部分shell命令,用起来比较方便。但是基本都是介绍在本地如何使用,而实际情况大家很少这样使用,一般都是在一台监控机器上远程读取目标服务器的信息。拓扑大致如下:

    读取信息的方式一般分两种:

    1)推式:在每台主机上部署获取信息的脚本,然后采用某种方式发送给监控机。

    2)拉式:脚本只部署在监控机上,主动从目标主机上读取信息。

    这两种方式无所谓好坏,根据自己的实际环境选择一个合适的即可。下面我要讲的是采用拉式读取信息。

    监控机:window7

    目标主机:linux 

    2.环境准备        

          1)paramiko在windows下的安装方式,详见:python结合shell脚本实现简单的日常集中巡检

          2)psutil模块是需要安装在目标服务器的,一般情况下都是linux系统,安装比较简单,下载安装包解压后,执行:python setup.py install 即可。这里需要重点提一下:目前此模块只支持python2.7到pythonpthon3.4,安装的时候注意下版本问题

    3.监控机上运行的脚本

          这个脚本主要是作为示范,演示下怎么实现上述功能,所以没有写特别复杂。

    import paramiko
    import os
    import psutil
    import json
    
    ##读取当前路径
    base_dir=os.getcwd()
    ##读取在远程主机执行的脚本
    cmd_filepath=base_dir+r"pu.txt"
    cmd_file=open(cmd_filepath,"r")
    cmd=cmd_file.read()
    ##连接远程主机
    client = paramiko.SSHClient()  
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  
    client.connect("192.168.42.62", 22,'root','Abcd1234')
    ##执行命令
    stdin, stdout, stderr = client.exec_command(cmd)
    ##读取信息
    for line in stdout:
        data = json.loads(line)
        #print(type(data))
        print(data["available"])
    ##关闭连接
    client.close()

    4.在远程主机执行的脚本(保存为pu.txt,以上面的代码对应)

    python <<EOF
    import json
    import psutil as pu
    memInfo = {}
    mem = pu.virtual_memory()
    memInfo["total"] = mem.total
    memInfo["available"] = mem.available
    memInfo["percent"] = mem.percent
    memInfo["used"] = mem.used
    memInfo["free"] = mem.free
    data = json.dumps(memInfo)
    print(data)
    EOF

    5.补充说明

             主要说下为什么要用json转换,并不是因为json流行,主要是考虑到如果第4步的脚本如果不是同一个人写的,你还需要问题返回的是什么类型,然后第三步接收到数据后再转换。如果用json的话,你直接loads后,用type打印下类型,就知道什么类型了,省去了不少麻烦。

  • 相关阅读:
    uip源码剖析【一】——【网络层】ARP解读
    MySql字符编码详解
    51单片机+uip实战
    dos中如何查找一个字符串是否包含在某个文件中,如果有则将该文件名输出
    Full TCP/IP for 8Bit Architectures 阅读
    个人PKM之路
    Overlooked Essentials For Optimizing Code
    Would it be faster to batch SetVertex/PixelShaderConstant calls?
    2D Skinned Mesh(3D的完全翻版 带旋转)
    The difference between d8&d9's constants def in asm shaders
  • 原文地址:https://www.cnblogs.com/lc1217/p/6812547.html
Copyright © 2020-2023  润新知