shell + python 服務器巡檢,生成excel巡檢報告


需求:過百台服務器需要巡檢,考慮到人工巡檢太浪費時間,於是寫了如下腳本,每天定時統計各服務器資源使用情況,統一匯總到一台服務器,進行合並、轉換excel

1、shell腳本統計系統資源使用情況,,根據閾值判斷是否正常,生成txt文件

 1 #!/bin/bash
 2 #獲取主機名
 3 system_hostname=$(hostname | awk '{print $1}')
 4 
 5 #獲取服務器IP
 6 system_ip=$(ifconfig eth0 |awk -F '[ :]+' 'NR==2{print $3}')
 7 
 8 #獲取總內存
 9 mem_total=$(free -m | grep Mem| awk -F " " '{print $2}')
10 
11 #獲取剩余內存
12 mem_free=$(free -m | grep "Mem" | awk '{print $4+$6}')
13 
14 #獲取已用內存
15 mem_use=$(free -m | grep Mem| awk -F " " '{print $3}')
16 
17 #獲取當前平均一分鍾負載
18 load_1=`top -n 1 -b | grep average | awk -F ':' '{print $5}' | sed -e 's/\,//g' | awk -F " " '{print $1}'`
19 
20 #獲取當前平均五分鍾負載
21 load_5=`top -n 1 -b | grep average | awk -F ':' '{print $5}' | sed -e 's/\,//g' | awk -F " " '{print $2}'`
22 
23 #獲取當前平均十五分鍾負載
24 load_15=`top -n 1 -b | grep average | awk -F ':' '{print $5}' | sed -e 's/\,//g' | awk -F " " '{print $3}'`
25 
26 #過濾磁盤使用率大於50%目錄,並加入描述
27 disk_1=$(df -Ph | awk '{if(+$5>50) print "分區:"$1,"總空間:"$2,"使用空間:"$3,"剩余空間:"$4,"磁盤使用率:"$5}')
28 
29 #拆分
30 disk_fq=$(df -Ph | awk '{if(+$5>50) print "分區:"$1}')
31 disk_to=$(df -Ph | awk '{if(+$5>50) print "總空間:"$2}')
32 disk_us=$(df -Ph | awk '{if(+$5>50) print "使用空間:"$3}')
33 disk_fe=$(df -Ph | awk '{if(+$5>50) print "剩余空間:"$4}')
34 disk_ul=$(df -Ph | awk '{if(+$5>50) print "磁盤使用率:"$5}')
35 disk_ux=$(df -Ph | awk '{if(+$5>50) print $5}')
36 
37 #文件路徑
38 path=/home/monitor_"$system_ip".txt
39 
40 #內存閾值
41 mem_mo='50'
42 
43 
44 echo -e " " > $path
45 echo -e "主機名:"$system_hostname >> $path
46 echo -e "服務器IP:"$system_ip >> $path
47 if [[ $(echo $disk_ux | sed s/%//g) -gt 50 ]]
48    then
49     echo $disk_fq >>$path
50     echo $disk_to >>$path
51     echo $disk_us >>$path
52     echo $disk_fe >>$path
53     echo $disk_ul >>$path
54     echo 磁盤巡檢狀態:不正常 >>$path
55    else
56     echo $disk_fq >>$path
57     echo $disk_to >>$path
58     echo $disk_us >>$path
59     echo $disk_fe >>$path
60     echo $disk_ul >>$path
61     echo 磁盤巡檢狀態:正常 >>$path
62  fi
63 PERCENT=$(printf "%d%%" $(($mem_use*100/$mem_total)))
64 PERCENT_1=$(echo $PERCENT|sed 's/%//g')
65 if [[ $PERCENT_1 -gt $mem_mo ]]
66     then
67      echo -e 總內存大小:$mem_total MB>> $path
68      echo -e 已用內存:$mem_use MB >> $path
69      echo -e 內存剩余大小:$mem_free MB >> $path
70      echo -e 內存使用率:$PERCENT >> $path
71      echo -e 內存巡檢狀態:不正常 >> $path
72     else
73      echo -e 總內存大小:$mem_total MB>> $path
74      echo - 已用內存:$mem_use MB >> $path
75      echo -e 內存剩余大小:$mem_free MB >> $path
76      echo -e 內存使用率:$PERCENT >> $path
77      echo 內存巡檢狀態:正常 >> $path
78 fi
79     echo -e 平均1分鍾負載:$load_1"\n"平均5分鍾負載:$load_5"\n"平均15分鍾:$load_15 >> $path
inspection.sh

執行效果:

主機名:i****
服務器IP:172****
分區:/dev/vda1
總空間:20G
使用空間:11G
剩余空間:7.9G
磁盤使用率:58%
磁盤巡檢狀態:不正常
總內存大小:3789 MB
已用內存:2117 MB
內存剩余大小:1672 MB
內存使用率:55%
內存巡檢狀態:不正常
平均1分鍾負載:0.07
平均5分鍾負載:0.03
平均15分鍾:0.05

2、python將txt文件轉換成excel,不正常巡檢結果標記紅色

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 import xlwt
 4 import datetime
 5 style = "font:colour_index red; align: wrap on, vert centre, horiz center;"
 6 styleb = xlwt.XFStyle()  # 創建一個樣式對象,初始化樣式
 7 al = xlwt.Alignment()
 8 al.horz = 0x02      # 設置水平居中
 9 al.vert = 0x01      # 設置垂直居中
10 styleb.alignment = al
11 red_style = xlwt.easyxf(style)
12 title_style = xlwt.easyxf('font: height 200, name Arial Black, colour_index blue, bold on; align: wrap on, vert centre, horiz center;' )
13 def getlist():  # 讀取txt
14     with open('hebing.txt', 'r+',encoding='utf-8') as f:
15         s1 = f.readlines()
16     f.close()
17     s2 = []
18     for i in s1:
19             if '\n' in i:
20                     s2.append(i[:-1])
21             else:
22                     s2.append(i)
23     return s2
24 def fenge():  # 分割
25     list0 = []  # 存貯空格行
26     for num, val0 in enumerate(getlist()):
27         if val0.split(':')[0] == '主機名':
28             list0.append(num)
29     list0.append(len(getlist()))
30     list1 = []   # 存貯內容
31     for num1,val1 in enumerate(list0[1:]):
32         temp = getlist()[list0[num1]:list0[num1+1]]
33         list1.append(temp)
34     return list1
35 def wxls():   # 寫入表格
36     title = ['主機名','服務器IP','分區','總空間','使用空間','剩余空間','磁盤使用率','磁盤巡檢狀態','總內存大小',
37     '已用內存','內存剩余大小','內存使用率','內存巡檢結果','平均1分鍾負載','平均5分鍾負載','平均15分鍾', 'ceshi']
38     workbook = xlwt.Workbook(encoding='utf-8')
39     worksheet = workbook.add_sheet('sheet1')
40     for i1, val in enumerate(title):
41         worksheet.write(0, i1, label=val,style = title_style)
42         first_col = worksheet.col(i1)
43         first_col.width = 180 * 20
44     for i2, val2 in enumerate(title):
45         for i3, val3 in enumerate(fenge()):
46             for j in val3:
47                 if j.split(':')[0] == val2:
48                     #print i2,i3,j.split(':')[1].decode('utf8')
49                     if j.split(':')[1] == '不正常':
50                         worksheet.write(i3 + 1, i2, label=j.split(':')[1],style=red_style)
51                     else:
52                         worksheet.write(i3+1, i2, label=j.split(':')[1] ,style = styleb)
53     name = 'miontior.xls'
54     workbook.save(name)
55 wxls()
Transformation.py

執行效果:

 


免責聲明!

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



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