当前位置 主页 > 服务器问题 > Linux/apache问题 >

    shell监控系统资源并通过短信报警的脚本

    栏目:Linux/apache问题 时间:2019-12-28 09:28

    目标分析:

    所需的监控资源:

    1、登陆用户数
    2、CPU负载
    3、服务探测
    4、硬盘空间(根分区、应用分区、备份分区)
    5、内存资源

    短信接口、邮件接口

    格式上传至附件

    脚本:

    #!/bin/bash
    #监控用户登录
    Usermonitor () {
    LoginUser=`uptime | awk '{print $6}'`
    if [ $LoginUser -ge 2 ]
    then
    Critical="当前系统登录用户人数超过1人,具体人数为:$LoginUser 个,请确认操作者人数。"
    status=0
    else
    echo "loginuser ok"
    status=1
    fi
    013.
    }
    #监控内存
    MemMonitor () {
    MemTotal=`free -m | grep Mem | awk -F: '{print $2}' | awk '{print $1}'`
    MemFree=`free -m | grep cache | awk NR==2 | awk '{print $4}'`
    MemFreeB=`awk 'BEGIN{printf "%.2f%\n",'$MemFree/$MemTotal\*100'}'`
    MemFreeS=`awk 'BEGIN{printf "%.f",'$MemFree/$MemTotal\*100'}'`
    if [ $MemFreeS -lt 10 ]
    then
    Critical="系统可用内存小于10%,实际可用内存为:$MemFreeB ,请处理。"
    status=0
    elif [ $MemFreeS -lt 20 ]
    then
    Warning="系统可用内存小于20%,实际可用内存为:$MemFreeB ,请查看。"
    WarningT="内存报警"
    status=1
    else
    echo "Mem OK"
    status=2
    fi
    }
    #监控分区空间大小
    DiskMonitorG () {
    #根分区
    DiskGB=`df -h | awk NR==2 | awk '{print $5}'`
    DiskGS=`df -h | awk NR==2 | awk '{print $5}' | awk -F% '{print $1}'`
    if [ $DiskGS -gt 90 ]
    then
    Critical="根分区使用率超过90%,实际已使用 $DiskGB ,请处理。"
    status=0
    elif [ $DiskGS -gt 80 -a $DiskGS -lt 90 ]
    then
    Warning="根分区使用率超过80%,实际已使用 $DiskGB , 请查看。"
    WarningT="根分区报警"
    status=1
    else
    echo "DiskGB Ok"
    status=2
    fi
    }
    DiskMonitorA () {
    #应用分区
    ApplyB=`df -h | awk NR==4 | awk '{print $5}'`
    ApplyS=`df -h | awk NR==4 | awk '{print $5}' | awk -F% '{print $1}'`
    if [ $ApplyS -gt 90 ]
    then
    Critical="应用分区使用率超过90%,实际已使用 $ApplyB ,请处理."
    status=0
    elif [ $ApplyS -gt 80 -a $ApplyS -lt 90 ]
    then
    Warning="应用分区使用率超过80%,实际已使用 $ApplyB ,请查看。"
    WarningT="应用分区报警"
    status=1
    else
    echo "Apply ok"
    status=2
    fi
    }
    #监控CPU负载
    CPULoad () {
    CPULoad1=`uptime | awk '{print $10}' | awk -F. '{print $1}'`
    CPULoad2=`uptime`
    if [ $CPULoad1 -gt 5 ]
    then
    Critical="CPU负载过高,请即使处理。 $CPULoad2 "
    status=0
    elif [ $CPULoad1 -gt 3 -a $CPULoad1 -lt 5 ]
    then
    Warning="CPU负载警告, $Warning "
    WarningT="CPU负载报警"
    status=1
    else
    echo "CPU OK"
    status=2
    fi
    }
    #监控服务状态
    ServerMonitor () {
    #服务状态监控
    timeout=10
    makfails=2
    fails=0
    success=0
    while true
    do
    /usr/bin/wget --timeout=$timeout --tries=1 http://192.168.20.84/ -q -O /dev/null
    if [ $? -ne 0 ]
    then
    let fails=fails+1
    success=0
    else
    fails=0
    let success=1
    fi
    if [ $success -ge 1 ]
    then
    exit 0
    fi
    if [ $fails -ge 1 ]
    then
    Critical="应用服务出现故障,请紧急处理!"
    echo $Critical | mutt -s "服务down" hao.lulu@chinaebi.com
    exit -1
    fi
    done
    }
    #发送报警短信、报警邮件
    for n in Usermonitor MemMonitor DiskMonitorG DiskMonitorA CPULoad ServerMonitor
    do
    $n
    if [ $status -eq 0 ]
    then
    curl "http://172.20.36.118/app/tms.do?tranCode=TM0311&;content=$Critical"
    elif [ $status -eq 1 ]
    then
    curl "http://172.20.36.118/app/tms.do?tranCode=TM0310&;title=$WarningT&content=Warning"
    else
    echo "ok"
    fi
    done