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
}