设为首页 收藏本站
查看: 841|回复: 0

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

[复制链接]

尚未签到

发表于 2018-8-22 09:54:04 | 显示全部楼层 |阅读模式
  在服务器较多的系统环境中,手工运维方式显然已经不能满足需求,当故障发生时,我们需要提前获得预警消息,及时解决故障隐患。同时还要省时省力,通过SHELL脚本来协助我们完成一些重复性的工作是一个不错的选择。这里主要提供了CPU、内存、磁盘利用率监控的SHELL脚本。可以根据自己的系统环境做简单的修改即可使用。
  附CPU压力测试SHELL脚本(网上找到的,经测试可用)执行脚本时后面添加CPU数量,如:
  ./killcpu.sh 2 会产生两个进程号,记住这2个进程号,测试完后杀掉进程,释放CPU资源。
  


  • #! /bin/sh
  • # filename killcpu.sh
  • for i in `seq $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=`cat /proc/meminfo |grep "MemTotal"|awk '{print $2}'`
  •   memfree=`cat /proc/meminfo |grep "MemFree"|awk '{print $2}'`
  •   cached=`cat /proc/meminfo |grep "^Cached"|awk '{print $2}'`
  •   buffers=`cat /proc/meminfo |grep "Buffers"|awk '{print $2}'`

  •   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=`df |grep 'sda1'|awk '{print $5}'|sed 's/%//g'`
  •   sda2_usage=`df |grep 'sda2'|awk '{print $5}'|sed 's/%//g'`
  •   lv01_usage=`df |grep opt|awk '{print $4}'|sed 's/\%//g'`

  •   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=`get_cpu_info`
  •   sleep 60
  •   time_point_2=`get_cpu_info`
  •   cpu_usage=`echo $time_point_1 $time_point_2|awk '{used=$3-$1;total=$3+$4-$1-$2;print used*100/total}'`

  •   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=`ps aux|sort -nk3r|head -n 11`
  • }

  • 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 &quot;CUP/MEM/DISK Stat of Alarm&quot; wenfeng_246@163.com < $report
  •    rm -rf $report
  • fi

  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554974-1-1.html 上篇帖子: shell三剑客之sed命令使用详解 下篇帖子: shell学习之find命令三十个实用示例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表