#一.编写系统负载监控的脚本文件
#!/bin/bash

########################################################################
#This scripts is checking the system load,vision 0.1
#Author:HeJunyi
#E-mail:158****4484@163.com
########################################################################

#使用uptime命令监控linux系统负载变化
 
#提取本服务器的IP地址信息
IP=`ifconfig eth1 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
 
#抓取cpu的总核数
cpu_num=`grep -c 'model name' /proc/cpuinfo`
 
#抓取当前系统15分钟的平均负载值
load_15=`uptime | awk '{print $NF}'`
 
#计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`  ##scale表示小数精度位数
 
#取上面平均负载值的个位整数
average_int=`echo $average_load | cut -f 1 -d "."`
 
#设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
load_warn=0.70
 
#当单个核心15分钟的平均负载值大于等于1.0(即average_int个位整数大于0);如果小于1.0则进行二次比较
if (($average_int > 0)); then
      echo "$IP服务器15min平均负载达到$average_load,超过警戒值1.0,请立即处理!"
else
#当前系统15分钟平均负载值与告警值进行比较(当大于成立会返回1,小于时会返回0 )
load_now=`expr $average_load \> $load_warn`
 
#如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员
 if (($load_now == 1)); then
    echo "$IP服务器15min平均负载达到$average_load,超过警戒值0.00,请及时处理"
 fi
fi


二、监控系统cpu的情况
#!/bin/bash

########################################################################
#This scripts is checking the cpu,vision 0.1
#Author:HeJunyi
#E-mail:158****4484@163.com
########################################################################
 
#提取本服务器的IP地址信息
IP=`ifconfig eth1|grep "inet addr"|awk '{print $2}'|cut -f2 -d":"`
 
#取当前空闲cpu百份比值
cpu_id=`top -b -n1|grep "Cpu"|awk '{print $5}'|cut -f1 -d"%"`

#取当前空闲cpu百份比值的整数部分
cpu_int=`echo $cpu_id|cut -f1 -d"."`
 
#设置空闲cpu的告警值为20%(即剩余小于20%)
if (($cpu_id < 20)); then
 echo "$IP服务器cpu剩余:$cpu_id%,请及时处理"
else
 echo "$IP服务器cpu剩余:$cpu_id%"
fi


三、监控系统内存
#!/bin/bash

########################################################################
#This scripts is checking the free_mem,vision 0.1
#Author:HeJunyi
#E-mail:158****4484@163.com
########################################################################
 
#抓取物理内存free值
echo Mem-free: `free -m | grep Mem | awk '{print $4}'`M  
 
#抓取缓冲区的free值
echo buffers/cache-free: `free -m | grep - | awk '{print $4}'`M
 
#抓取Swap分区free值
echo Swap-free: `free -m | grep Swap | awk '{print $4}'`M


四、监控系统交换分区swap的情况
#!/bin/bash

########################################################################
#This scripts is checking the swap,vision 0.1
#Author:HeJunyi
#E-mail:158****4484@163.com
########################################################################
 
#提取本服务器的IP地址信息
IP=`ifconfig eth1 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
 
#系统分配的交换分区总量
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}'`


#设置交换分区的告警值为20%
swap_warn=0.20

if (($swap_used != 0)); then
 
#如果交换分区已被使用,则计算当前剩余交换分区free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
   swap_per=`echo "scale=2;b=$swap_free/$swap_total;if(length(b)==scale(b)) print 0;print b"|bc`

#当前剩余交换分区百分比与告警值进行比较(当小于告警值20%时会返回1,小于大于时会返回0 )
   swap_now=`expr $swap_per \< $swap_warn`
 
#如果当前交换分区使用即剩余小于20%(上面的返回值等于1)
  if (($swap_now ==1));then
  echo "$IP服务器swap交换分区使用率达到80%,只剩下"$swap_free"M 未使用,请及时处>理!"
 fi
fi