天天看點

Python統計伺服器的負載情況

假如公司有幾百台伺服器,現在統計每一台伺服器的負載情況,并将資料導入到excel中?

思路:

首先将每一台伺服器的負載統計出來,并導入到檔案中 –> 對檔案進行處理,截取我們想要的内容 –> 利用python對檔案進行操作,将其内容放到一個字典中或者清單中 –> 運用python的xlsxwriter子產品,将檔案裡的内容導入到excel中

一、統計所有伺服器的負載情況(下面我就以四台為例)

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# scripts: service_uptime.py
import threading,paramiko
url_list = ['192.168.88.130',
            '192.168.88.131',
            '192.168.88.132',
            '192.168.88.133',
            ]
def run(ssh_ip):
    private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=ssh_ip,port=,username='root',password=private_key)
    stdin,stdout,stderr = ssh.exec_command('uptime')
    res,err = stdout.read(),stderr.read()
    result = res if res else err
    print(ssh_ip,result.decode())
    ssh.close()
if __name__ == '__main__':
    for ip in url_list:
        t = threading.Thread(target=run,args=(ip,))
        t.start()
           

上述代碼中是采用密鑰對的方式對伺服器進行連接配接,當然也可以通過密碼的方式來連接配接,代碼如下:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.88.130',port=,username='root',password='123456')
stdin,stdout,stderr = ssh.exec_command('uptime')
res,err = stdout.read(),stderr.read()
result = res if res else err
print(result.decode())
ssh.close()
           

将統計出來的伺服器負載導入到檔案中 python service_uptime.py > uptime.txt

二、對負載檔案進行處理,截取我們想要的内容

awk -F',' '{print $1","$(NF-2)","$(NF-1)","$(NF)}' uptime.txt | sed -e \
's#(##g' -e 's#)##g' -e 's#\\n##g' -e 's#load average:##g' -e "s#'##g" > new.txt
           
Python統計伺服器的負載情況

三、利用python對檔案的操作和子產品将檔案内容放到excel表格中

#!/usr/bin/env python
#-*- coding:utf-8 -*-

uptime_dic = {}
with open('new.txt','r') as f:
    for line in f:
        ip, uptime1, uptime5, uptime15 = line.strip('\n').split(',')
        uptime_dic[ip.strip()] = [ip.strip(),uptime1.strip(),uptime5.strip(),uptime15.strip()]

import xlsxwriter
workbook = xlsxwriter.Workbook('uptime.xls') # 建立檔案
worksheet = workbook.add_worksheet() # 建立sheet, 可以work.add_worksheet('employee')來指定sheet名,但中文名會報UnicodeDecodeErro的錯誤

# Start from the first cell. Rows and columns are zero indexed. 按标号寫入是從0開始的,按絕對位置'A1'寫入是從1開始的
row = 
col = 
worksheet.write('A1','ip')
worksheet.write('B1','1分鐘負載')
worksheet.write('C1','5分鐘負載')
worksheet.write('D1','15分鐘負載')
for ip, uptime1,uptime5,uptime15 in uptime_dic.values():
    worksheet.write(row, col, ip)
    worksheet.write(row, col + , uptime1)
    worksheet.write(row, col + , uptime5)
    worksheet.write(row, col + , uptime15)
    row += 

workbook.close()
           
Python統計伺服器的負載情況

備注:

1、如果統計記憶體,磁盤使用量等内容都是一樣的

2、我寫的可能比較low,因為我都是自學python,可能并沒有那麼好,直接寫成一個python檔案就把上面的操作全部給統計出來

擴充

源碼安裝paramiko

#安裝依賴包
yum -y install zlib-devel readline-devel libffi-devel python-devel openssl-devel  gcc git

#下載下傳pycrypto和paramiko包
wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-.tar.gz
git clone https://github.com/paramiko/paramiko.git 

#編譯安裝
tar -xf pycrypto-.tar.gz
cd pycrypto-
python setup.py install

cd paramiko
python setup.py build
python setup.py install