Linux—服务器CPU 内存 磁盘 监控SHELL脚本

释放双眼,带上耳机,听听看~!

在服务器较多的系统环境中,手工运维方式显然已经不能满足需求,当故障发生时,我们需要提前获得预警消息,及时解决故障隐患。同时还要省时省力,通过SHELL脚本来协助我们完成一些重复性的工作是一个不错的选择。这里主要提供了CPU、内存、磁盘利用率监控的SHELL脚本。可以根据自己的系统环境做简单的修改即可使用。

附CPU压力测试SHELL脚本(网上找到的,经测试可用)执行脚本时后面添加CPU数量,如:

./killcpu.sh 2 会产生两个进程号,记住这2个进程号,测试完后杀掉进程,释放CPU资源。

#! /bin/sh  
# filename killcpu.sh 
for i in

1
1`

seq $1

1
1`

 
do 
echo -ne "  
i=0;  
while true  
do  
ii=i+1;  
done" | /bin/sh & 
pid_array[$i]=$! ; 
done 
for i in "${pid_array[@]}"; do 
echo 'kill ' $i ';'; 
done

 

# 服务器CPU/MEM/DISK监控脚本(server_moniter.sh) 
#—————————————————————— 
# 对服务器的CPU/MEM/DISK设定阈值,动态监控利用率,超过阈值发送邮件 
# 或者短信告警 

# 本脚本通过调用watch_mem函数实现内存利用率监控,这里的内存利用率计算是进程实
# 际使用的内存,也就是used-buffer/cache,超过阈值发送息。 
#  
# 通过调用watch_hd函数实现磁盘利用率监控,这里的磁盘利用率,我采用 
# 一个一个磁盘或分区检索,这种方式对于磁盘或分区较多时,可能不太方 
# 便,可以采用循环判断。之前提供的脚本里面有,可以参考。 
#  
# 通过调用wath_cpu函数实现CPU利用率监控,这里是通过在一分钟内2次采 
# 集/proc/stat中的CPU数据,再对每1次采集点的数据中的使用CPU时间与空闲CPU时
# 间累加求和,最后将2次采集点运算结果求差,获得CPU在一分钟类# 使用时间利用率,
# 这种计算方式比较准确,如果超过阈值发送消息。 

# 在每一个函数中设置一个判断返回值,如果超过阈值,条件为真则返回1,如果返回值
# 为1则 将告警消息附加到report中,最后如果report这个文件 
# 存在,发送邮件通知管理员,将report做为邮件的正文。 
#
# 可以将这个脚本添加到定时任务,每隔10分种执行一次检查。
#—————————————————————— 

#! /bin/bash 

mem_quota=20 
hd_quota=50 
cpu_quota=80 

# watch memory usage 

watch_mem() 

memtotal=

1
1`

cat /proc/meminfo |grep "MemTotal"|awk '{print $2}'

1
1`

 
memfree=

1
1`

cat /proc/meminfo |grep "MemFree"|awk '{print $2}'

1
1`

 
cached=

1
1`

cat /proc/meminfo |grep "^Cached"|awk '{print $2}'

1
1`

 
buffers=

1
1`

cat /proc/meminfo |grep "Buffers"|awk '{print $2}'

1
1`

 

mem_usage=$((100-memfree*100/memtotal-buffers*100/memtotal-cached*100/memtotal)) 

if [ $mem_usage -gt $mem_quota ];then 
mem_message="WARN! The Memory usage is over than $mem_usage%" 
return 1 
else 
return 0 
fi 

# watch disk usage 

watch_hd() 

sda1_usage=

1
1`

df |grep 'sda1'|awk '{print $5}'|sed 's/%//g'

1
1`

 
sda2_usage=

1
1`

df |grep 'sda2'|awk '{print $5}'|sed 's/%//g'

1
1`

 
lv01_usage=

1
1`

df |grep opt|awk '{print $4}'|sed 's/%//g'

1
1`

 

if [ $sda1_usage -gt $hd_quota ] || [ $sda2_usage -gt $hd_quota ] || [ $lv01_usage -gt $hd_quota ]; then 
hd_message="WARN! The Hard Disk usage is over than $hd_quota%" 
return 1 
else 
return 0 
fi 

# watch cpu usage in one minute 

get_cpu_info() 

cat /proc/stat|grep '^cpu[0-9]'|awk '{used+=$2+$3+$4;unused+=$5+$6+$7+$8} END{print used,unused}' 

watch_cpu() 

time_point_1=

1
1`

get_cpu_info

1
1`

 
sleep 60 
time_point_2=

1
1`

get_cpu_info

1
1`

 
cpu_usage=

1
1`

echo $time_point_1 $time_point_2|awk '{used=$3-$1;total=$3+$4-$1-$2;print used*100/total}'

1
1`

 

if [[ $cpu_usage > $cpu_quota ]]; then 
cpu_message="WARN! The CPU Usage is over than $cpu_quota%" 
return 1 
else 
return 0 
fi 

proc_cpu_top10() 

proc_busiest=

1
1`

ps aux|sort -nk3r|head -n 11

1
1`

 

report=/root/server_report.log 
watch_mem 
if [ $? -eq 1 ]; then 
date >> $report 
echo "$mem_message" >> $report 
fi 

watch_hd 
if [ $? -eq 1 ]; then 
date >> $report 
echo "$hd_message" >> $report 
fi 

watch_cpu 
if [ $? -eq 1 ]; then 
date >> $report 
echo "$cpu_message" >> $report 
proc_cpu_top10 
echo "$proc_busiest" >> $report 
fi 

if [ -a $report ]; then 
mail -s "CUP/MEM/DISK Stat of Alarm" wenfeng_246@163.com < $report  
rm -rf $report 
fi

给TA打赏
共{{data.count}}人
人已打赏
安全技术安全运维

Windows服务器如何发现被黑

2018-5-20 12:24:31

安全技术

JavaScript获取浏览器高度和宽度值(documentElement,clientHeight,offsetHeight,scrollHeight,scrollTop,offsetParent,...

2021-12-21 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索