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()

 

####################################################################

 形成的表格内容如下:

 

posted @ 2023-08-04 14:30  往事已成昨天  阅读(548)  评论(0编辑  收藏  举报