shell 监控cpu,memory,load average

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秒运行一次。

#!/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=‘[email protected]‘

# 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

}

# 获取内存使用情况

function GetMem() {

mem=$(free -m | sed -n ‘3,3p‘)

used=$(echo $mem | awk -F ‘ ‘ ‘{print $3}‘)

free=$(echo $mem | awk -F ‘ ‘ ‘{print $4}‘)

total=$(($used + $free))

limit=$(($total/10))

echo "${total} ${used} ${free}"

local remark

remark=$(GetRemark ${MEM_REMARK})

# 检查内存占用是否超过90%

if [ "$remark" = "" ] && [ "$limit" -gt "$free" ]; then

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

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

fi

}

# 获取load average

function GetLoad() {

load=$(uptime | awk -F ‘load average: ‘ ‘{print $2}‘)

m1=$(echo $load | awk -F ‘, ‘ ‘{print $1}‘)

m5=$(echo $load | awk -F ‘, ‘ ‘{print $2}‘)

m15=$(echo $load | awk -F ‘, ‘ ‘{print $3}‘)

echo "${m1} ${m5} ${m15}"

m1u=$(echo $m1 | awk -F ‘.‘ ‘{print $1}‘)

local remark

remark=$(GetRemark ${LOAD_REMARK})

# 检查是否负载是否有压力

if [ "$remark" = "" ] && [ "$m1u" -gt "2" ]; then

echo "Subject: ${HOST} Load Average more than 2 $(date +%Y-%m-%d‘ ‘%H:%M:%S)" | sendmail ${NOTICE_EMAIL}

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

fi

}

# 获取上一次发送电邮时间

function GetRemark() {

local remark

if [ -f "$1" ] && [ -s "$1" ]; then

remark=$(cat $1)

if [ $(( $NOW - $remark )) -gt "$REMARK_EXPIRE" ]; then

rm -f $1

remark=""

fi

else

remark=""

fi

echo $remark

}

# *** function end ***

cpuinfo=$(GetCpu)

meminfo=$(GetMem)

loadinfo=$(GetLoad)

echo "cpu: ${cpuinfo}" >> "${CPU_LOG}"

echo "mem: ${meminfo}" >> "${MEM_LOG}"

echo "load: ${loadinfo}" >> "${LOAD_LOG}"

exit 0

时间: 2024-12-28 00:04:14

shell 监控cpu,memory,load average的相关文章

利用shell监控cpu、磁盘、内存使用率

利用shell监控cpu.磁盘.内存使用率,达到警报阈值发邮件进行通知 并配合任务计划,即可及时获取报警信息 #!/bin/bash ############################################## #Author: Liuzhengwei - [email protected] #QQ:1135960569 #Last modified: 2017-04-19 21:50 #Filename: jiankong.sh #Description:  #########

Linux系统下CPU使用(load average)梳理

在平时的运维工作中,当一台服务器的性能出现问题时,通常会去看当前的CPU使用情况,尤其是看下CPU的负载情况(load average).要想获得服务器的CPU负载情况,有下面三种命令: 1)w命令 [[email protected] ~]# w 12:12:41 up 167 days, 20:46, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root

linux 监控CPU memory disk process 脚本

#!/bin/bash # #This is a monitor system CPU Memory process disk IO disk zone statistixs scripts. # # ##CPU usage rate /bin/date>> /mnt/system_info.log echo -e "\n" >> /mnt/system_info.log ##CPU usage rate echo -e "\033[31mCPU us

Linux性能监控——CPU,Memory,IO,Network

版权声明:本文由刘爽原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/107 来源:腾云阁 https://www.qcloud.com/community 一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%. 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是

利用shell监控cpu、磁盘、内存使用率,达到警报阈值发邮件进行通知

#!/bin/bash#获取cpu使用率cpuUsage=top -n 1 | awk -F '[ %]+' 'NR==3 {print $2}'#获取磁盘使用率data_name="/dev/vda1"diskUsage=df -h | grep $data_name | awk -F '[ %]+' '{print $5}'logFile=/tmp/jiankong.log#获取内存情况mem_total=free -m | awk -F '[ :]+' 'NR==2{print

压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate

分类: 4.软件设计/架构/测试 2010-01-12 19:58 34241人阅读 评论(4) 收藏 举报 测试loadrunnerlinux服务器firebugthread 上篇讲如何用LoadRunner监控Linux的性能指标 ,但是关于CPU的几个指标没有搞清楚,下面就详细说说. CPU Utilization 好理解,就是CPU的利用率,75%以上就比较高了(也有说法是80%或者更高).除了这个指标外,还要结合Load Average和Context Switch Rate来看,有可

Linux shell 脚本监控cpu,内存,硬盘,网络,是否存活

写脚本的背景:脚本实现简单的监控,而不需要用非常的重的监控软件完成. 脚本如下 #!/bin/sh # 脚本放入到/usr/local/bin # chmod 755 check_server.sh # crontab 中添加 source /etc/bashrc #------监控阈值 DISK_space_warn=90 CPU_load_warn=5 CPU_use_warn=50 MEM_use_warn=95 #SWAP_use_warn=50 Net_SYN_count_warn=2

Linux 性能监控 —— Load Average

一. 简介 top. uptime. cat /proc/loadavg 命令中 Load average: 4.90, 5.51, 5.77 总体含义: 正在运行的任务数量 + 排队的任务数量 第一个数字例如上述的 4.90 代表上 1 分钟的数据 第二个数字例如上述的 5.51 代表前 5 分钟的数据 第三个数字例如上述的 5.77 代表前 15 分钟的数据 二. 多核和多 CPU 的区别 1 个 CPU 单核系统 Load average:1 表示有 1 个正在运行任务, 1 个 CPU

Load Average和CPU使用率的区别

Load Average 是指在运行队列里面的任务数,假如只有1个进程在运行队列里面1分钟,那1分钟的load average就是1:只有1个进程在运行队列里面半分钟,那1分钟的load average就是0.5,意思是在过去1分钟内,运行队列有50%的时间是没有任务的. 处在运行队列里面的进程的状态是R,在Linux中,除了R状态的进程会被计算进load average外,D状态的进程也会被计算进去,D状态的进程就是处于uninterruptable sleep(不可被打断)状态的进程,这些进