自動化運維:使用psutil和paramiko讀取遠程主機信息

編程語言 JSON 腳本語言 Linux 科技優家 2017-05-07

1.前言

今天大致看了下自動化運維的東西,裡面介紹到了psutil模塊,其封裝了linux 下的大部分shell命令,用起來比較方便。但是基本都是介紹在本地如何使用,而實際情況大家很少這樣使用,一般都是在一臺監控機器上遠程讀取目標服務器的信息。拓撲大致如下:

自動化運維:使用psutil和paramiko讀取遠程主機信息

讀取信息的方式一般分兩種:

1)推式:在每臺主機上部署獲取信息的腳本,然後採用某種方式發送給監控機。

2)拉式:腳本只部署在監控機上,主動從目標主機上讀取信息。

這兩種方式無所謂好壞,根據自己的實際環境選擇一個合適的即可。下面我要講的是採用拉式讀取信息。

監控機:window7

目標主機:linux

2.環境準備

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打印下類型,就知道什麼類型了,省去了不少麻煩。

相關推薦

推薦中...