centos服务器巡检脚本

服务器巡检脚本

系统负载shell脚本

python 复制代码
#!/bin/bash

#文件路径
path="/root/monitor.txt"

#yum -y install bc sysstat net-tools lrzsz
#获取主机名
system_hostname=$(hostname | awk '{print $1}')

#获取服务器IP
system_ip=$(ip a|grep "global"|awk '{print $2}' |awk -F/ '{print $1}')

#获取服务器系统
system=$(cat /etc/os-release | grep "^NAME" | awk -F\" '{print $2}')

#获取服务器系统版本
version=$(cat /etc/redhat-release | awk '{print $4$5}')

#获取总内存
#free -m|awk '/Mem/ {printf ("%.f\n",$2/1024)}'
mem_total=$(free -m | grep Mem| awk -F " " '{print $2}')

#获取已用内存
mem_use=$(free -m | grep Mem| awk -F " " '{print $3}')

#获取可用内存
mem_free=$(free -m | grep "Mem" | awk '{print $7}')

#取CPU核数
Cpu_num=`grep processor /proc/cpuinfo|wc -l`

#cpu使用率
Cpu_use=`top -n 1 -b |grep 'Cpu(s)' |awk '{print $2}'`

#获取当前平均一分钟负载
load_1=`uptime | awk '{print $11}' | sed -e 's/\,//g' | awk -F " " '{print $1}'`

#获取当前平均五分钟负载
load_5=`uptime | awk '{print $12}' | sed -e 's/\,//g' | awk -F " " '{print $1}'`

#获取当前平均十五分钟负载
load_15=`uptime | awk '{print $13}'`

#磁盘I/O
disk_io=`iostat -d -x -k 1 1 | grep -Ev "^$|Linux|Device"| grep vda| awk '{print $1,$14"ms"}'`

#过滤磁盘使用率大于50%目录,并加入描述
disk_1=$(df -Ph | awk '{if(+$5>50) print "分区:"$1,"总空间:"$2,"使用空间:"$3,"剩余空间:"$4,"磁盘使用率:"$5}')

#拆分
disk_fq=$(df -h | grep "root" | awk '{print "分区:"$1}')
disk_to=$(df -Ph | grep "root" | awk '{print "总空间:"$2}')
disk_us=$(df -Ph | grep "root" | awk '{print "使用空间:"$3}')
disk_fe=$(df -Ph | grep "root" | awk '{print "剩余空间:"$4}')
disk_ul=$(df -Ph | grep "root" | awk '{print "磁盘使用率:"$5}')
disk_ux=$(df -Ph | grep "root" | awk '{print $5}')


#内存阈值
mem_mo='50'

echo -e " " > $path
echo -e "主机名:"$system_hostname >> $path
echo -e "服务器IP:"$system_ip >> $path
echo -e "服务器系统:"$system >> $path
echo -e "服务器系统版本:"$version >> $path
echo -e "总内存:"$mem_total >> $path
echo -e "已使用内存:"$mem_use >> $path
echo -e "可用内存:"$mem_free >> $path
echo -e "cpu核数:"$Cpu_num >> $path
echo -e "cpu使用率:"$Cpu_use >> $path
echo -e "磁盘IO:"$disk_io >> $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 -e 已用内存:$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

执行脚本后会在/root 目录生成monitor.txt

python将txt文件转换成excel,不正常巡检结果标记红色

python 复制代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#使用环境python2.7

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('/root/monitor.txt', 'r+') 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', '服务器系统', '服务器系统版本', '分区', '总空间', '使用空间', '剩余空间', '磁盘使用率', '磁盘巡检状态', '总内存大小',
             '已用内存', '内存剩余大小', '内存使用率', '内存巡检状态', 'cpu核数', 'cpu使用率', '磁盘IO', '平均1分钟负载', '平均5分钟负载', '平均15分钟', '备注']
    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 = 'miontior.xls'
    workbook.save(name)


wxls()
相关推荐
ChinaRainbowSea1 小时前
1. Linux下 MySQL 的详细安装与使用
linux·数据库·sql·mysql·adb
网络安全(华哥)1 小时前
网络安全服务实施流程管理 网络安全服务体系
运维·服务器·网络
致奋斗的我们1 小时前
Nginx反向代理及负载均衡
linux·运维·mysql·nginx·负载均衡·shell·openeluer
百锦再1 小时前
在Linux上创建一个Docker容器并在其中执行Python脚本
linux·python·docker
忧虑的乌龟蛋2 小时前
嵌入式 Linux:使用设备树驱动GPIO全流程
linux·服务器·嵌入式·imx6ull·gpio·点灯·pinctrl
朝九晚五ฺ2 小时前
【Linux探索学习】第三十弹——线程互斥与同步(上):深入理解线程保证安全的机制
linux·运维·学习
小林熬夜学编程2 小时前
【MySQL】第八弹---全面解析数据库表的增删改查操作:从创建到检索、排序与分页
linux·开发语言·数据库·mysql·算法
六六六六六66662 小时前
企业组网IP规划与先关协议分析
服务器·网络·tcp/ip
m0_748236113 小时前
Spring Boot 实战:轻松实现文件上传与下载功能
linux·spring boot·后端
鱼不如渔3 小时前
leetcode刷题第十三天——二叉树Ⅲ
linux·算法·leetcode