1.获取服务器资源

  1. #!/bin/bash
  2. #获取主机名
  3. system_hostname=$(hostname | awk '{print $1}')
  4. #获取服务器IP
  5. system_ip=$(ifconfig eth0 |awk -F '[ :]+' 'NR==2{print $3}')
  6. #获取总内存
  7. mem_total=$(free -m | grep Mem| awk -F " " '{print $2}')
  8. #获取剩余内存
  9. mem_free=$(free -m | grep "Mem" | awk '{print $4+$6}')
  10. #获取已用内存
  11. mem_use=$(free -m | grep Mem| awk -F " " '{print $3}')
  12. #获取当前平均一分钟负载
  13. #load_1=`top -n 1 -b | grep average | awk -F ':' '{print $5}' | sed -e 's/\,//g' | awk -F " " '{print $1}'`
  14. load_1=`w|grep load|awk '{print $(NF-2)}'`
  15. #获取当前平均五分钟负载
  16. #load_5=`top -n 1 -b | grep average | awk -F ':' '{print $5}' | sed -e 's/\,//g' | awk -F " " '{print $2}'`
  17. load_5=`w|grep load|awk '{print $(NF-1)}'`
  18. #获取当前平均十五分钟负载
  19. #load_15=`top -n 1 -b | grep average | awk -F ':' '{print $5}' | sed -e 's/\,//g' | awk -F " " '{print $3}'`
  20. load_15=`w|grep load|awk '{print $(NF)}'`
  21. #过滤磁盘使用率大于50%目录,并加入描述
  22. disk_1=$(df -Ph | awk '{if(+$5>40) print "分区:"$1,"总空间:"$2,"使用空间:"$3,"剩余空间:"$4,"磁盘使用率:"$5}')
  23. #拆分
  24. disk_fq=$(df -Ph | awk '{if(+$5>30) print "分区:"$1}')
  25. disk_to=$(df -Ph | awk '{if(+$5>30) print "总空间:"$2}')
  26. disk_us=$(df -Ph | awk '{if(+$5>30) print "使用空间:"$3}')
  27. disk_fe=$(df -Ph | awk '{if(+$5>30) print "剩余空间:"$4}')
  28. disk_ul=$(df -Ph | awk '{if(+$5>30) print "磁盘使用率:"$5}')
  29. disk_ux=$(df -Ph | awk '{if(+$5>30) print $5}')
  30. #存文件路径
  31. path=/server/scripts/"$system_hostname"-"$system_ip".txt
  32. #内存阈值
  33. mem_mo='50'
  34. date=`date +%Y-%m-%d`
  35. DATE=`date +%Y-%m-%d-%H-%M-%S`
  36. mem=`free -h |grep "Mem" |awk -F ' ' '{print $2}'`
  37. hn=`hostname`
  38. pycpu=`cat /proc/cpuinfo | grep "physical id"|sort | uniq | wc -l`
  39. locpu=`cat /proc/cpuinfo | grep "processor"| wc -l`
  40. CPU_Type=`grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq`
  41. CPU_Arch=`uname -m`
  42. uptime=`uptime | sed 's/.*up \([^,]*\), .*/\1/'`
  43. echo -e " " >> $path
  44. #echo -e "服务器当前日期:"${DATE} >>$path
  45. echo -e "主机名:"$system_hostname >> $path
  46. echo -e "服务器IP:"$system_ip >> $path
  47. #echo -e "系统运行时间:" ${uptime} >>$path
  48. #echo -e "物理CPU个数:" ${pycpu} >>$path
  49. #echo -e "逻辑CPU个数:" ${locpu} >>$path
  50. #echo -e "CPU架构:" ${CPU_Arch} >>$path
  51. #echo -e "CPU型号:" ${CPU_Type} >>$path
  52. Disk_use=`echo $disk_ux|sed "s#%# #g"|awk '{print $1}'`
  53. if [[ $Disk_use -gt 30 ]]
  54. then
  55. echo $disk_fq >>$path
  56. echo $disk_to >>$path
  57. echo $disk_us >>$path
  58. echo $disk_fe >>$path
  59. echo $disk_ul >>$path
  60. echo 磁盘巡检状态:不正常 >>$path
  61. else
  62. echo $disk_fq >>$path
  63. echo $disk_to >>$path
  64. echo $disk_us >>$path
  65. echo $disk_fe >>$path
  66. echo $disk_ul >>$path
  67. echo 磁盘巡检状态:正常 >>$path
  68. fi
  69. #内存使用率
  70. PERCENT=$(printf "%d%%" $(($mem_use*100/$mem_total)))
  71. #内存使用率与阈值比对
  72. PERCENT_1=$(echo $PERCENT|sed 's/%//g')
  73. if [[ $PERCENT_1 -gt $mem_mo ]]
  74. then
  75. echo -e 总内存大小:$mem_total MB>> $path
  76. echo -e 已用内存:$mem_use MB >> $path
  77. echo -e 内存剩余大小:$mem_free MB >> $path
  78. echo -e 内存使用率:$PERCENT >> $path
  79. echo -e 内存巡检结果:不正常 >> $path
  80. else
  81. echo -e 总内存大小:$mem_total MB>> $path
  82. echo -e 已用内存:$mem_use MB >> $path
  83. echo -e 内存剩余大小:$mem_free MB >> $path
  84. echo -e 内存使用率:$PERCENT >> $path
  85. echo 内存巡检结果:正常 >> $path
  86. fi
  87. echo -e 平均1分钟负载:$load_1"\n"平均5分钟负载:$load_5"\n"平均15分钟:$load_15 >> $path
  88. TIME_INTERVAL=5
  89. LAST_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}')
  90. LAST_SYS_IDLE=$(echo $LAST_CPU_INFO | awk '{print $4}')
  91. LAST_USER_BUSY=$(echo $LAST_CPU_INFO | awk '{print $1}')
  92. LAST_SYS_BUSY=$(echo $LAST_CPU_INFO | awk '{print $3}')
  93. LAST_TOTAL_CPU_T=$(echo $LAST_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}')
  94. LAST_CPU_USAGE=$(echo $LAST_CPU_INFO | awk '{print $1+$2+$3}')
  95. sleep ${TIME_INTERVAL}
  96. NEXT_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}')
  97. NEXT_SYS_IDLE=$(echo $NEXT_CPU_INFO | awk '{print $4}')
  98. NEXT_USER_BUSY=$(echo $NEXT_CPU_INFO | awk '{print $1}')
  99. NEXT_SYS_BUSY=$(echo $NEXT_CPU_INFO | awk '{print $3}')
  100. NEXT_TOTAL_CPU_T=$(echo $NEXT_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}')
  101. NExT_CPU_USAGE=$(echo $NEXT_CPU_INFO | awk '{print $1+$2+$3}')
  102. #系统空闲时间
  103. SYSTEM_IDLE=`echo ${NEXT_SYS_IDLE} ${LAST_SYS_IDLE} | awk '{print $1-$2}'`
  104. #系统使用时间
  105. SYSTEM_BUSY=`echo ${NEXT_SYS_BUSY} ${LAST_SYS_BUSY} | awk '{print $1-$2}'`
  106. #用户使用时间
  107. USER_BUSY=`echo ${NEXT_USER_BUSY} ${LAST_USER_BUSY} | awk '{print $1-$2}'`
  108. #用户+系统+nice时间
  109. TOTAL_BUSY=`echo ${NExT_CPU_USAGE} ${LAST_CPU_USAGE} | awk '{print $1-$2}'`
  110. #CPU总时间
  111. TOTAL_TIME=`echo ${NEXT_TOTAL_CPU_T} ${LAST_TOTAL_CPU_T} | awk '{print $1-$2}'`
  112. #CPU总时间百分比
  113. CPU_USAGE=`echo ${TOTAL_BUSY} ${TOTAL_TIME} | awk '{printf "%.2f", $1/$2*100}'`
  114. #用户时间百分比
  115. CPU_USER_USAGE=`echo ${USER_BUSY} ${TOTAL_TIME}|awk '{printf "%.2f", $1/$2*100}'`
  116. #系统时间百分比
  117. CPU_sys_USAGE=`echo ${SYSTEM_BUSY} ${TOTAL_TIME} |awk '{printf "%.2f", $1/$2*100}'`
  118. ##统计内存使用率
  119. Total=`cat /proc/meminfo |grep -w MemTotal|awk '{print $2}'`Free=`cat /proc/meminfo |grep -w MemFree|awk '{print $2}'`
  120. Available=`cat /proc/meminfo |grep -w MemAvailable|awk '{print $2}'`
  121. MemUsage=`echo "${Total} ${Available}"|awk '{printf "%.2f", ($1-$2)/$1*100}'`
  122. ##磁盘使用率
  123. ZL=`df |grep 'dev\|tmpfs'|awk '{sum +=$2}END{print sum}'`
  124. KY=`df |grep 'dev\|tmpfs'|awk '{sum +=$3}END{print sum}'`
  125. DfUsage=`echo "${ZL} ${KY}"|awk '{printf "%.2f",($1-$2)/$1*100}'`
  126. echo CPU 总使用率:${CPU_USAGE}% >> $path
  127. echo CPU用户使用率:${CPU_USER_USAGE}% >> $path
  128. echo CPU系统使用率:${CPU_sys_USAGE}% >> $path

image.png

2.文件写入xls

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import xlwt
import datetime 
import socket
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():  
    with open('tj1-b2c-b2cback-zkong-web01.kscn-10.38.251.158.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分钟','CPU 总使用率','CPU用户使用率','CPU系统使用率']
    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:
                    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 = 'tj1-b2c-b2cback-zkong-web01.kscn-10.38.251.158.xls'
    workbook.save(name)
wxls()

image.png

3.推送文件下载服务器

#!bin/bash
set -xe

file="/server/scripts/"
Host="118.31..112"
Pass=""
xls_file="tj1-b2c-b2cback-zkong-web01.kscn-10.38..158.xls"

sshpass -p $Pass scp $file$xls_file root@118.31..112:/usr/local/esl/nginx/html/build

echo " " >/server/scripts/tj1-b2c-b2cback-zkong-web01.kscn-10.38..158.txt
echo " " >/server/scripts/$xls_file