shell + python 服务器巡检,生成excel巡检报告

Posted mliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

执行效果:

技术图片

 

以上是关于shell + python 服务器巡检,生成excel巡检报告的主要内容,如果未能解决你的问题,请参考以下文章

使用python发送数据库巡检邮件

使用python发送数据库巡检邮件

服务器自动巡检shell脚本

精品Linux系统硬件网络系统及安全巡检邮箱告警脚本shell脚本

通过shell备份oracle用户数据,并将巡检结果发送至windows跳板机

宝典OpenStack集群k8s集群与docker等集群综合巡检shell脚本