Shell监控服务器状态


#!/bin/bash
#功能描述: 服务器状态监控(监控CPU、磁盘、内存)
#创建作者: xingcheng
#创建日期: 2017/12/01
#参数说明: 无
############################################################################
#加载环境变量
. /etc/profile

#设置系统语言
export LANG="en_US.UTF-8"
############################################################################
#全局变量
sta_date_format="+%Y%m%d%H%M%S"
out_date_format="+%Y-%m-%d %H:%M:%S"
curr_date=$(date "$sta_date_format")

#警戒值
bound_load_average=5
bound_cpu_used_percent=40
bound_disk_used_percent=90
bound_mem_used_percent=80

#是否邮件通知
mail_notify=0

#邮件接收人
mail_to="com"

#分隔行符号
sep_line="*********************************************************************************\n"

############################################################################
#函数说明: 获取局域网IP
#参数说明: 无

get_local_ip()
{
    echo $(ifconfig | grep 'inet addr:' | head -n 1 | cut -d ':' -f2 | awk '{printf $1}')
}

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


############################################################################
#函数说明: 获取CPU最近一分钟内的负载值
#参数说明: $(uptime)

get_last_load_average()
{
    echo $(echo -e "$1" | egrep -o 'load average(.*)' | cut -d ' ' -f3 | tr -d ',')
}

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


############################################################################
#函数说明: 获取磁盘最大使用百分比
#参数说明: $(df)

get_disk_max_percent()
{
    echo $(echo -e "$1" | sed -n '2,$p' | grep -o '[0-9]*%' | grep -o '[0-9]*' | sort -n | sed -n '$p')
}

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


############################################################################
#函数说明: 获取内存已使用百分比(保留两位小数)
#参数说明: $(free)

get_used_mem_percent()
{
    #获取总内存
    total_mem=$(echo -e "$1" | grep Mem | awk '{print $2}')

    #获取已用内存(包括缓存)
    used_mem_1=$(echo -e "$1" | grep Mem | awk '{print $3}')

    #获取剩余空存(不包括缓存)
    free_mem_1=$(echo -e "$1" | grep Mem | awk '{print $4}')

    #获取已用内存(不包括缓存)
    used_mem_2=$(echo -e "$1" | grep - | awk '{print $3}')

    #获取剩余空存(包括缓存)
    free_mem_2=$(echo -e "$1" | grep - | awk '{print $4}')

    #已用内存百分比(包括缓存)
    # echo "scale=2;$used_mem_1 * 100 / $total_mem" | bc

    #已用内存百分比(不包括缓存)
    echo "scale=2;$used_mem_2 * 100 / $total_mem" | bc
}

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


############################################################################
#把自己加入到crontab中
crontab_path="/var/spool/cron/$(whoami)"
egrep "$0" $crontab_path &> /dev/null
if [ $? -ne 0 ]; then
    #当前脚本自动运行时间
    sed -i '1i '"*/5 * * * * $0" $crontab_path
fi

#负载监控
parm_txt=$(uptime)
cur_load_average=$(get_last_load_average "$parm_txt")
if [ $(echo "$cur_load_average >= $bound_load_average" | bc) -eq 1 ]; then
    mail_notify=1
    mail_body_prefix="$mail_body_prefix""系统负载已达到警戒值(当前值: $cur_load_average; 警戒值:$bound_load_average)\n\n"
    mail_body_suffix="$mail_body_suffix""当前系统负载情况: \n$parm_txt\n\n"
fi

#CPU监控
parm_txt=$(top -b -n 1 | grep Cpu)
cur_cpu_idle_percent=$(echo "$parm_txt" | awk '{print $5}' | cut -d '%' -f1)
cur_cpu_used_percent=$(echo "scale=2;100 - $cur_cpu_idle_percent" | bc)
if [ $(echo "$cur_cpu_used_percent >= $bound_cpu_used_percent" | bc) -eq 1 ]; then
    mail_notify=1
    mail_body_prefix="$mail_body_prefix""CPU使用率已达到警戒值(当前值: $cur_cpu_used_percent%; 警戒值:$bound_cpu_used_percent%)\n\n"
    mail_body_suffix="$mail_body_suffix""当前CPU使用率情况: \n$parm_txt\n\n"
fi

#磁盘监控
parm_txt=$(df -h)
cur_disk_used_percent=$(get_disk_max_percent "$parm_txt")
if [ $(echo "$cur_disk_used_percent >= $bound_disk_used_percent" | bc) -eq 1 ]; then
    mail_notify=1
    mail_body_prefix="$mail_body_prefix""磁盘使用已达到警戒值(当前值: $cur_disk_used_percent%; 警戒值:$bound_disk_used_percent%)\n\n"
    mail_body_suffix="$mail_body_suffix""当前磁盘使用情况: \n$parm_txt\n\n"

fi

#内存监控
parm_txt=$(free)
cur_mem_used_percent=$(get_used_mem_percent "$parm_txt")
if [ $(echo "$cur_mem_used_percent >= $bound_mem_used_percent" | bc) -eq 1 ]; then
    mail_notify=1
    mail_body_prefix="$mail_body_prefix""内存使用已达到警戒值(当前值: $cur_mem_used_percent%; 警戒值:$bound_mem_used_percent%)\n\n"
    mail_body_suffix="$mail_body_suffix""当前内存使用情况: \n$parm_txt\n\n"
fi

#邮件通知
if [ $mail_notify -eq 1 ]; then
    echo -e "$sep_line\n$mail_body_prefix$sep_line\n$mail_body_suffix$sep_line" | mail -s "【服务器监控报警】【$(get_local_ip)】【$(date '+%Y-%m-%d %H:%M:%S')】" -r ".com" "$mail_to"
fi
############################################################################
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值