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

Linux shell 脚本监控cpu,内存,硬盘,网络,是否存活

[复制链接]

尚未签到

发表于 2018-8-21 13:10:51 | 显示全部楼层 |阅读模式
#!/bin/sh  
# 脚本放入到/usr/local/bin
  
# chmod 755 check_server.sh
  
# crontab 中添加
  
source /etc/bashrc
  

  
#------监控阈值
  
DISK_space_warn=90
  
CPU_load_warn=5
  
CPU_use_warn=50
  
MEM_use_warn=95
  
#SWAP_use_warn=50
  
Net_SYN_count_warn=200
  

  
#判断参数
  
if [ $# -ne 2 ]; then
  
    hint_msg="usage: $0 Monitoring_type,Monitoring_type phone,phone,phone"
  
    echo $hint_msg
  echo "sh $0 disk,cpu,mem,net,io,alive"
  
    exit -1
  
fi
  

  
#------监控项
  
Monitoring_type_tmp=$1
  
Monitoring_type=$(echo $Monitoring_type_tmp | sed -e 's/,/ /g')
  

  
now=`date -u -d"+8 hour" +'%Y-%m-%d %H:%M:%S'`
  

  
#------机器操作系统
  
OS_version=''
  
if  grep -q 'CentOS release 6' /etc/redhat-release ; then
  OS_version='CentOS6'
  
else
  OS_version='CentOS7'
  
fi
  

  
#------ip地址
  
localip=`hostname -I | tr ' ' '\n' | grep -E '(^10\.|^172\.(1[6-9]|2[0-9]|31)|^192\.168)' | head -n 1`
  

  
send_warning()
  
{
  发短信的函数
  发送下面的msg变量
  
}
  

  

  
#------监控CPU相关信息
  
function sub_cpu(){
  cpu_num=`grep -c 'model name' /proc/cpuinfo`
  #------cpu 负载 15 minutes
  load_15=`cat /proc/loadavg  | awk '{print $2}'`
  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 "."`
  if [ "${average_int}" -ge "${CPU_load_warn}" ];then
  msg=${HOSTNAME}" "${localip}" System load average of 15 minutes is "${average_load}" more than "${CPU_load_warn}
  echo "${now} ${msg}"  >> log
  send_warning
  fi
  #------cpu 使用率
  if [ ${OS_version} == 'CentOS6' ];then
  cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
  else
  cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}' | cut -f 1 -d "."`
  fi
  CPU_use=`expr 100 - $cpu_idle`
  if [ "${CPU_use}" -ge "${CPU_use_warn}" ];then
  msg=${HOSTNAME}" "${localip}" CPU utilization is "${CPU_use}"% more than "${CPU_use_warn}"%"
  echo "${now} ${msg}"  >> log
  send_warning
  fi
  
}
  

  
#------监控内存
  
function sub_mem(){
  MEM_use=`free | grep "Mem" | awk '{printf("%d", $3*100/$2)}'`
  if [ $MEM_use -ge $MEM_use_warn ];then
  msg=${HOSTNAME}" "${localip}" Mem_used:"${MEM_use}"% more than "${MEM_use_warn}"%"
  echo "${now} ${msg}"  >> log
  send_warning
  fi
  #SWAP有很多环境为0 例如在AWS云,腾讯云上
  #SWAP_use=`free | grep "Swap" | awk '{printf("%d", $3*100/$2)}'`
  #if [ $SWAP_use -ge $SWAP_use_warn ];then
  #
  #send_warning
  #fi
  
}
  

  

  
#------监控硬盘空间
  
function sub_disk(){
  #[注意这里用df -P]
  for DISK_space in `df -P | grep /dev | grep -v -E '(tmp|boot)' | awk '{print $5}' | cut -f 1 -d "%" `
  do
  if [ $DISK_space -ge "${DISK_space_warn}" ]; then
  msg=${HOSTNAME}" "${localip}" Hard disk space :"${DISK_space}"% more than "${DISK_space_warn}"%"
  echo "${now} ${msg}"  >> log
  send_warning
  fi
  done
  
}
  

  
#------监控网络相关
  
function sub_net(){
  

  #------syn 半连接数
  Net_SYN_count=`ss -an | grep -ic syn`
  if [ "${Net_SYN_count}" -ge "${Net_SYN_count_warn}" ]; then
  msg=${HOSTNAME}" "${localip}" Net SYN count :"${Net_SYN_count}" more than "${Net_SYN_count_warn}
  echo "${now} ${msg}"  >> log
  send_warning
  fi
  
}
  

  
#------监控项
  
for type in $Monitoring_type
  
do
  [ "${type}" == 'disk' ] && sub_disk
  [ "${type}" == 'cpu' ] && sub_cpu
  [ "${type}" == 'mem' ] && sub_mem
  [ "${type}" == 'net' ] && sub_net
  [ "${type}" == 'io' ] && sub_io
  #[ "${type}" == 'alive' ] && sub_alive
  
done
  

  

  
#判断端口是否通 也是判断是否alive的
  
#!/bin/bash
  
#Alive=`echo -e "\n" | telnet  192.168.1.30 22 | grep Connected | wc -l`
  
#if [ "$Alive" == 1 ];then
  
#        echo "0"    #如果JG等于1,端口为通,输出0
  
#else
  
#        echo "1"    #如果JG等于0,端口不通,输出1
  
#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-554720-1-1.html 上篇帖子: Linux shell脚本编程详解及应用实例 下篇帖子: Linux之bash shell特性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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