需求:過百台伺服器需要巡檢,考慮到人工巡檢太浪費時間,于是寫了如下腳本,每天定時統計各伺服器資源使用情況,統一彙總到一台伺服器,進行合并、轉換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
執行效果:
轉載于:https://www.cnblogs.com/mliu/p/10822835.html