1.前言
今天大致看了下自動化運維的東西,裡面介紹到了psutil模塊,其封裝了linux 下的大部分shell命令,用起來比較方便。但是基本都是介紹在本地如何使用,而實際情況大家很少這樣使用,一般都是在一臺監控機器上遠程讀取目標服務器的信息。拓撲大致如下:
讀取信息的方式一般分兩種:
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打印下類型,就知道什麼類型了,省去了不少麻煩。
相關推薦
推薦中...