加入收藏 | 设为首页 | 会员中心 | 我要投稿 文章分享网_茂名站长网 (https://www.0668zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

介绍一个VPS系统监控资源的脚本

发布时间:2022-06-14 11:23:33 所属栏目:Linux 来源:互联网
导读:以下是本人自己民写的一个Shell脚本,可以监控使用的VPS的CPU、Load、Memory、网络传输、网站能否打开等情况,感觉挺有用的,现在分享出来给需要的朋友. 几个月前开始使用VPS,每月限制300GB流量,流量方便基本够用了,但是有时候由于受到一些恶意访问,导致CPU、Me
  以下是本人自己民写的一个Shell脚本,可以监控使用的VPS的CPU、Load、Memory、网络传输、网站能否打开等情况,感觉挺有用的,现在分享出来给需要的朋友.
 
  几个月前开始使用VPS,每月限制300GB流量,流量方便基本够用了,但是有时候由于受到一些恶意访问,导致CPU、Memory等资源消耗较大,导致VPS上的博客网站响应时间太慢甚至有时根本无法打开网页,所以,我简单做了个脚本来进行监控和发邮件报警.
 
  由于不是做很专业的运维,暂时不想上很专业的监控工具,如:Nagios、Puppet、Cacti、Zabbix等,所以自己手动了个Shell脚本来监控我关心的CPU、Load、Memory、网络传输、博客网站能否打开等内容,将该监控脚本分享如下:
 
  https://github.com/smilejay/shell/blob/master/sh2013/vps_monitor.sh,代码如下:
 
  #!/bin/bash
  #set -x
  # the script to monitor my VPS
  # It will alert when memory, load, CPU%, networking, httpd/mysqld or home-page
  # is in an abnormal state.
  # author: Jay
  # date: 2013-10-16
   
  EMAIL="smile665@gmail.com"
  WARN_MSG=""
   
  # alert when free memory is less than 50 MB
  function mem_free()
  {
          threshold=50 # 50 MB free memory
          free_mem=$(free -m | grep "buffers/cache" | awk '{print $4}')
          if [ $free_mem -lt $threshold ]; then
                  WARN_MSG=$WARN_MSG"Free memeory is less than $threshold MB.n"
                  return 1
          fi
          return 0
  }
   
  # alert when load (5min) is larger than 4
  function load_avg()
  {
          threshold=4 # load is 4
          load_5min=$(cat /proc/loadavg | awk '{print $2}')
          if [ $(echo "$load_5min > $threshold" | bc) -eq 1 ]; then
          WARN_MSG=$WARN_MSG"5min average load is larger than $threshold.n"
                  return 1
          fi
          return 0
  }
   
  # alert when CPU idle% is less than 20%
  function cpu_idle()
  {
          threshold=20 # CPU idle% 20%
          cpu_idle=$(sar 1 5 | grep -i 'Average' | awk '{print $NF}')
          if [ $(echo "$cpu_idle < $threshold" | bc) -eq 1 ]; then
                  # in printf cmd, %% represents a single %
                  WARN_MSG=$WARN_MSG"CPU idle%% is less than $threshold%%.n"
                  return 1
          fi
          return 0
  }
   
  # alert when networking tx speed is larger than 80 kB/s
  function network_tx()
  {
          threshold=80 # TX speed 80 kB/s
          interface=eth0
          tx_speed=$(sar -n DEV 10 5 | grep "Average" | grep "$interface" | awk '{print $6}')
          if [ $(echo "$tx_speed > $threshold" | bc) -eq 1 ]; then
                  WARN_MSG=$WARN_MSG"networking TX speed is larger than $threshold kB/s.n"
                  return 1
          fi
          return 0
  }
   
  # alert when httpd or mysqld process doesn't exist
  function httpd_mysqld()
  {
          ps -ef | grep 'httpd' | grep -v 'grep'
          if [ $? -ne 0 ]; then
                  WARN_MSG=$WARN_MSG"httpd process doesn't exist.n"
                  return 1
          else
                  ps -ef | grep 'mysqld' | grep -v 'grep'
                  if [ $? -ne 0 ]; then
                          WARN_MSG=$WARN_MSG"mysqld process doesn't exist.n"
                          return 1
                  fi
          fi
          return 0
  }
   
  # alert when 'Stay hungry' doesn't exist in the home page http://smilejay.com/
  function home_page()
  {
          url=http://smilejay.com/
          keywords="Stay hungry"
          curl -sL $url | grep -i "$keywords"
          if [ $? -ne 0 ]; then
                  WARN_MSG=$WARN_MSG"keywords '$keywords' doesn't exist on link $url.n"  --phpfensi.com
                  return 1
          fi
          return 0
  }
   
  # use an array to store the return value of each monitoring function
  mem_free
  chk[1]=$?
  load_avg
  chk[2]=$?
  cpu_idle
  chk[3]=$?
  network_tx
  chk[4]=$?
  httpd_mysqld
  chk[5]=$?
  home_page
  chk[6]=$?
   
  # send warning email to the web master if any of the check fails.
  for i in $(seq 1 6)
  do
          if [ ${chk[i]} -ne 0 ]; then
                  printf "$WARN_MSG" | mailx -s "Warning from smilejay.com" $EMAIL
                  exit 1
          fi
  done
 

(编辑:文章分享网_茂名站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读