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

1.前言 html

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

读取信息的方式通常分两种:linux

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

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

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

监控机:window7服务器

目标主机:linux 运维

 

2.环境准备        python2.7

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

      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打印下类型,就知道什么类型了,省去了很多麻烦。

相关文章
相关标签/搜索