python实现linux自动巡检及形成Excel表格
shell脚本形成.txt文件
#########################################################
#!/bin/bash 2 #获取主机名
system_hostname=$(hostname | awk '{print $1}')
#获取服务器IP
system_ip=$(ifconfig eth0 |awk -F '[ :]+' 'NR==2{print $3}')
#获取总内存
mem_total=$(free -m | grep Mem| awk -F " " '{print $2}')
#获取剩余内存
mem_free=$(free -m | grep "Mem" | awk '{print $4+$6}')
#获取已用内存
mem_use=$(free -m | grep Mem| awk -F " " '{print $3}')
#获取当前平均一分钟负载
load_1=`top -n 1 -b | grep average | awk -F ':' '{print $5}' | sed -e 's/\,//g' | awk -F " " '{print $1}'`
#获取当前平均五分钟负载
load_5=`top -n 1 -b | grep average | awk -F ':' '{print $5}' | sed -e 's/\,//g' | awk -F " " '{print $2}'`
#获取当前平均十五分钟负载
load_15=`top -n 1 -b | grep average | awk -F ':' '{print $5}' | sed -e 's/\,//g' | awk -F " " '{print $3}'`
#过滤磁盘使用率大于50%目录,并加入描述
disk_1=$(df -Ph | awk '{if(+$5>50) print "分区:"$1,"总空间:"$2,"使用空间:"$3,"剩余空间:"$4,"磁盘使用率:"$5}')
#拆分
disk_fq=$(df -Ph | awk '{if(+$5>50) print "分区:"$1}')
disk_to=$(df -Ph | awk '{if(+$5>50) print "总空间:"$2}')
disk_us=$(df -Ph | awk '{if(+$5>50) print "使用空间:"$3}')
disk_fe=$(df -Ph | awk '{if(+$5>50) print "剩余空间:"$4}')
disk_ul=$(df -Ph | awk '{if(+$5>50) print "磁盘使用率:"$5}')
disk_ux=$(df -Ph | awk '{if(+$5>50) print $5}')
#文件路径
path=/home/monitor_"$system_ip".txt
#内存阈值
mem_mo='50'
echo -e " " > $path
echo -e "主机名:"$system_hostname >> $path
echo -e "服务器IP:"$system_ip >> $path
if [[ $(echo $disk_ux | sed s/%//g) -gt 50 ]]
then
echo $disk_fq >>$path
echo $disk_to >>$path
echo $disk_us >>$path
echo $disk_fe >>$path
echo $disk_ul >>$path
echo 磁盘巡检状态:不正常 >>$path
else
echo $disk_fq >>$path
echo $disk_to >>$path
echo $disk_us >>$path
echo $disk_fe >>$path
echo $disk_ul >>$path
echo 磁盘巡检状态:正常 >>$path
fi
PERCENT=$(printf "%d%%" $(($mem_use*100/$mem_total)))
PERCENT_1=$(echo $PERCENT|sed 's/%//g')
if [[ $PERCENT_1 -gt $mem_mo ]]
then
echo -e 总内存大小:$mem_total MB>> $path
echo -e 已用内存:$mem_use MB >> $path
echo -e 内存剩余大小:$mem_free MB >> $path
echo -e 内存使用率:$PERCENT >> $path
echo -e 内存巡检状态:不正常 >> $path
else
echo -e 总内存大小:$mem_total MB>> $path
echo - 已用内存:$mem_use MB >> $path
echo -e 内存剩余大小:$mem_free MB >> $path
echo -e 内存使用率:$PERCENT >> $path
echo 内存巡检状态:正常 >> $path
fi
echo -e 平均1分钟负载:$load_1"\n"平均5分钟负载:$load_5"\n"平均15分钟:$load_15 >> $path
##########################################################
形成的文件如下,执行效果如下:
@@@@@@@@@@@@@@@@@@@@@
python脚本将.txt文件表格化,形成Excel表格
####################################################################
#!/usr/bin/python import xlwt import datetime style = "font:colour_index red; align: wrap on, vert centre, horiz center;" styleb = xlwt.XFStyle() # 创建一个样式对象,初始化样式 al = xlwt.Alignment() al.horz = 0x02 # 设置水平居中 al.vert = 0x01 # 设置垂直居中 styleb.alignment = al red_style = xlwt.easyxf(style) title_style = xlwt.easyxf('font: height 200, name Arial Black, colour_index blue, bold on; align: wrap on, vert centre, horiz center;' ) def getlist(): # 读取txt with open('/home/monitor_192.168.8.246.txt', 'r+',encoding='utf-8') as f: s1 = f.readlines() f.close() s2 = [] for i in s1: if '\n' in i: s2.append(i[:-1]) else: s2.append(i) return s2 def fenge(): list0 = [] for num, val0 in enumerate(getlist()): if val0.split(':')[0] == '主机名': list0.append(num) list0.append(len(getlist())) list1 = [] # 存贮内容 for num1,val1 in enumerate(list0[1:]): temp = getlist()[list0[num1]:list0[num1+1]] list1.append(temp) return list1 def wxls(): # 写入表格 title = ['主机名','服务器IP','分区','总空间','使用空间','剩余空间','磁盘使用率','磁盘巡检状态','总内存大小', '已用内存','内存剩余大小','内存使用率','内存巡检状态','平均1分钟负载','平均5分钟负载','平均15分钟', 'ceshi'] workbook = xlwt.Workbook(encoding='utf-8') worksheet = workbook.add_sheet('sheet1') for i1, val in enumerate(title): worksheet.write(0, i1, label=val,style = title_style) first_col = worksheet.col(i1) first_col.width = 180 * 20 for i2, val2 in enumerate(title): for i3, val3 in enumerate(fenge()): for j in val3: if j.split(':')[0] == val2: #print i2,i3,j.split(':')[1].decode('utf8') if j.split(':')[1] == '不正常': worksheet.write(i3 + 1, i2, label=j.split(':')[1],style=red_style) else: worksheet.write(i3+1, i2, label=j.split(':')[1] ,style = styleb) name = 'miontior.xls' workbook.save(name) wxls()
####################################################################
形成的表格内容如下: