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