zzx@zzx:~$ cat warning.sh 
#!/bin/bash

#监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。    前提安装mail服务
nh=`uname -r`     #查当前使用内核  3.2.0-29-generic

echo 系统当前使用内核为:$nh
 Mail=XXX@126.com
 #提取本服务器的IP地址信息
 IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
 
  # 1、监控系统负载的变化情况,超出时发邮件告警:
  
   #抓取cpu的总核数
   cpu_num=`grep -c 'model name' /proc/cpuinfo`
    #抓取当前系统15分钟的平均负载值
    load_15=`uptime | awk -F"," '{print $5}'| cut -f1 -d","`
    
     #计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
     average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`
     
      #取上面平均负载值的个位整数
      average_int=`echo $average_load | cut -f 1 -d "."`
      
       #设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
       load_warn=0.70
        #当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较
        if  [ $average_int -gt 0 ];then
        echo "$IP服务器15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!" | mail -s "$IP 服务器系统负载严重告警!!" $MAil
           else        
         #当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )
        # load_now=`expr $average_load \> $load_warn`
          load_now=`echo "$average_load>$load_warn"|bc`
          #如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员
          if [ $load_now -eq 0 ];then
          echo "$IP 服务器15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。"| mail -s "$IP 服务器系统负载告警" $Mail
        # $Mail
          fi
          
           fi
           echo 1end
            # 2、监控系统cpu的情况,当使用超过80%的时候发告警邮件:
            
             #取当前空闲cpu百份比值(只取整数部分)
             cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
             echo 空闲cpu:$cpu_idle%
              #设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警
              if [ $cpu_idle -ge 20 ]; then
             echo "$IP服务器cpu剩余$cpu_idle%,使用率已经超过80%,请及时处理。" | mail -s "$IP 服务器CPU告警" $Mail
              fi
              echo 2end
               # 3、监控系统交换分区swap的情况,当使用超过80%的时候发告警邮件:
               
                #系统分配的交换分区总量
                swap_total=`free -m | grep Swap | awk '{print $2}'`
                
                 #当前剩余的交换分区free大小
                 swap_free=`free -m | grep Swap | awk '{print $4}'`
                 
                  #当前已使用的交换分区used大小
                  swap_used=`free -m | grep Swap | awk '{print $3}'`
#echo $swap_free                  
                   if [ $swap_used -eq 0 ]; then  # -ne 0
                   #如果交换分区已被使用,则计算当前剩余交换分区free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
                   swap_per=0`echo "scale=2;$swap_free/$swap_total" | bc`
                 #  echo swap_per$swap_per                   
                    #设置交换分区的告警值为20%(即使用超过80%的时候告警)。
                    swap_warn=0.20
                    
                     #当前剩余交换分区百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0 )
                     swap_now=`echo "$swap_per>$swap_warn"|bc`
#                    echo "swap_now:${swap_now}"
                     
                      #如果当前交换分区使用超过80%(即剩余小于20%,上面的返回值等于0),立即发邮件告警
                    if [ $swap_now -ne 0 ];then #  if (($swap_now != 0)); then
                      echo swapfree:${swap_free}M
                      echo "$IP服务器swap交换分区只剩下 $swap_free M 未使用,剩余不足20%,使用率已经超过80%,请及时处理。" | mail -s "$IP 服务器内存告警" $Mail
                      fi
                      
                       fi
                       echo 3end
                        # 4、监控系统硬盘根分区使用的情况,当使用超过80%的时候发告警邮件:
                        
                         #取当前根分区(/dev/sda1)已用的百份比值(只取整数部分)
                         disk_sda1=`df -h | grep /dev/sda1 | awk '{print $5}' | cut -f 1 -d "%"`
                         
                          #设置空闲硬盘容量的告警值为80%,如果当前硬盘使用超过80%,立即发邮件告警
                          if (($disk_sda1 > 1)); then   #设置 >80
echo "$IP 跟分区使用率已经超过1 达到  ${disk_sda1}%"
                          echo "$IP 服务器 /根分区 使用率已经超过1%,达到 $disk_sda1请及时处理。" | mail -s "$IP 服务器硬盘告警" $Mail
                          fi
                           echo 4end
                           #5、监控系统用户登录的情况,当用户数超过3个的时候发告警邮件:
                           
                            #取当前用户登录数(只取数值部分)
                            users=`uptime | awk -F"," '{print $3}'|awk '{print $1}'`
                            
                             #设置登录用户数的告警值为3个,如果当前用户数超过3个,立即发邮件告警
                     if [ $users  -ge 1 ]; then  # -ge 3
echo "$IP 用户数达到$users 请处理"
                             echo "$IP 服务器用户数已经达到$users个,请及时处理。" | mail -s "$IP 服务器用户数告警" $Mail
                             fi
                          echo 5end

~~~~~~~~~~~~~~~~~~~~~~~~~~

二、加入任务计划:每十分钟检测一次,有告警则立即发邮件(十分钟发一次)。

复制代码代码示例:
# crontab -e
*/10 * * * *  /scripts/sys-warning.sh 
# service crond restart

监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。的更多相关文章

  1. shell脚本监控系统负载、CPU和内存使用情况

    hostname >>/home/vmuser/xunjian/xj.logdf -lh >>/home/vmuser/xunjian/xj.logtop -b -n 1 | ...

  2. 监测linux系统负载与CPU、内存、硬盘、用户数的shell脚本

    本节主要内容: 利用Shell脚本来监控Linux系统的负载.CPU.内存.硬盘.用户登录数. 一.linux系统告警邮件脚本 # vim /scripts/sys-warning.sh #!/bin ...

  3. Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数)

    [转]Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题.我是在运维过程中要用到的.因此,今天给出Wind ...

  4. VPS性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench和压力测试

    现在便宜的VPS主机越来越多了,一些美国的VPS主机甚至给出1美元一月的VPS,堪比虚拟主机还要便宜,巨大的价格优势吸引不少人购买和使用,而近些年来国内的主机商也开始意识到便宜的VPS对草根站长的诱惑 ...

  5. Windows 性能监视器的基本指标(CPU,内存,硬盘参数)

    转载:http://kms.lenovots.com/kb/article.php?id=7045 Windows 性能监视器的基本指标(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的 ...

  6. 一个统计 CPU 内存 硬盘 使用率的shell脚本

    一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考 #!/bin/bash #This script is use for describle CPU Hard Memery Uti ...

  7. 通过shell监控网页是否正常,然后促发邮件告警

    最近在网上找了下通过shell编写一个脚本来监控网页是否正常,如果不正常则促发邮件告警,修复后有一个修复的通知邮件:但一直没有找到全面的,所以自己研究了下,写了一个linux对接邮箱和通过shell写 ...

  8. linux系统中的基础监控(硬盘,内存,系统负载,CPU,网络等)

      Linux系统常见日常监控 系统信息 查看 CentOS 版本号:cat /etc/redhat-release 综合监控 nmon 系统负载 命令:w(判断整体瓶颈) 12:04:52 up 1 ...

  9. centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息

    1.系统 1.1版本 uname -a 能确认是64位还是32位,其它的信息不多 [root@localhost ~]# uname -a Linux localhost.localdomain 3. ...

随机推荐

  1. HDU3306-Another kind of Fibonacci(矩阵构造)

    Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  2. Day7 - J - Raising Modulo Numbers POJ - 1995

    People are different. Some secretly read magazines full of interesting girls' pictures, others creat ...

  3. B. Misha and Changing Handles

    B. Misha and Changing Handles time limit per test 1 second memory limit per test 256 megabytes input ...

  4. [LeetCode] 934. Shortest Bridge 最短的桥梁

    In a given 2D binary array A, there are two islands.  (An island is a 4-directionally connected grou ...

  5. 一百零四、SAP中ALV事件之十六,让ALV表格能点击修改

    一.上一篇我们写到生产的ALV表格,但是表格内容不支持修改,如果我们需要修改下图的数量,需要怎么操作呢 二.代码如下,设置 ls_fieldcat-edit = 'X'.   "允许编辑. ...

  6. 024-PHP常用字符串函数(一)

    <?php $first = "abc"; $second = "aBc"; )//字串比较 { print("字符串相等:".&qu ...

  7. Golang modules包依赖管理工具

    初始化 执行go mod  init module-name,其中module-name为包名字,执行完后会生成go.mod文件,如下 module module-name go 1.13 包管理 使 ...

  8. 实验吧-密码学-try them all(加salt的密码)、robomunication(摩斯电码)、The Flash-14(闪电侠14集)

    try them all(加salt的密码) 首先,要了解什么事加salt的密码. 加salt是一种密码安全保护措施,就是你输入密码,系统随机生成一个salt值,然后对密码+salt进行哈希散列得到加 ...

  9. Python MySQL Delete

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

  10. idea自定义快捷鍵

    一  生成方法注释 1. File -> Settings... 2. Editor -> Live Templates,点击最右边的+ 3. 依自己情况选择,我这里选择的 Live Te ...