假如公司有幾百台伺服器,現在統計每一台伺服器的負載情況,并将資料導入到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對檔案的操作和子產品将檔案内容放到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()
備注:
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