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


1.前言 

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

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

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

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

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

監控機:window7

目標主機:linux 

 

2.環境准備        

      1)paramiko在windows下的安裝方式,詳見:python結合shell腳本實現簡單的日常集中巡檢

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM