自動化運維:使用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打印下類型,就知道什麼類型了,省去了很多麻煩。

相關文章
相關標籤/搜索