老李分享:shell 监控cpu,memory,load average

 

   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。  Poptest在培训性能的时候,会教学员如何用其他辅助的技术手段来完成性能监控,快速的定位性能瓶颈。下面就是利用shell完成监控目标:

shell 监控cpu,memory,load average,记录到log,当负载压力时,发电邮通知管理员。

 

原理:

 

1.获取cpu,memory,load average的数值

 

2.判断数值是否超过自定义的范围,例如(CPU>90%,Memory<10%,load average>2)

 

3.如数值超过范围,发送电邮通知管理员。发送有时间间隔,每小时只会发送一次。

 

4.将数值写入log。

 

5.设置crontab 每30秒运行一次。

 

 

 

ServerMonitor.sh

#!/bin/bash

 

# 系统监控,记录cpu、memory、load average,当超过规定数值时发电邮通知管理员

 

# *** config start ***

 

# 当前目录路径

ROOT=$(cd "$(dirname "$0")"; pwd)

 

# 当前服务器名

HOST=$(hostname)

 

# log 文件路径

CPU_LOG="${ROOT}/logs/cpu.log"

MEM_LOG="${ROOT}/logs/mem.log"

LOAD_LOG="${ROOT}/logs/load.log"

 

# 通知电邮列表

NOTICE_EMAIL='admin@admin.com'

 

# cpu,memory,load average 记录上一次发送通知电邮时间

CPU_REMARK='/tmp/servermonitor_cpu.remark'

MEM_REMARK='/tmp/servermonitor_mem.remark'

LOAD_REMARK='/tmp/servermonitor_loadaverage.remark'

 

# 发通知电邮间隔时间

REMARK_EXPIRE=3600

NOW=$(date +%s)

 

# *** config end ***

 

 

# *** function start ***

 

# 获取CPU占用

function GetCpu() {

    cpufree=$(vmstat 1 5 |sed -n '3,$p' |awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}')

    cpuused=$((100 - $cpufree))

    echo $cpuused

 

    local remark

    remark=$(GetRemark ${CPU_REMARK})

 

    # 检查CPU占用是否超过90%

    if [ "$remark" = "" ] && [ "$cpuused" -gt 90 ]; then

        echo "Subject: ${HOST} CPU uses more than 90% $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}

        echo "$(date +%s)" > "$CPU_REMARK"

    fi

}