centos 监控cpu-内存-硬盘脚本
young / / / 阅读量

首先配置好mailx     具体方法点击

最近遇到一个监控系统cpu,内存,硬盘并超过固定值发邮件的告警需要,以后可能还会用到,特在此记录。

脚本具体内容如下:

#!/bin/sh

#---------配置信息---------
#日志路径
LogSave="/data_new/data/logs"
#端口号
ListenPort=7071
#进程标识
ProRemark="tomcat8"
#磁盘名
DiskName="/dev/mapper/myvg_new-mylv_new"

#------接收配置-----------
#主题名
MailName="服务器告警--"
#收件人
MailReceives=""
#抄送人
MailCopies=""

#-------警告配置---------
#进程cpu告警
JCPUMax=70
MEMMax=70
DISKMax=70

if [ ! -f $LogSave ]; then
 mkdir -p $LogSave
fi

#while [ true ]
#do

#主机名
HostName=`hostname`
#主机ip
HostIp=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
#端口总占用
COUNT=`netstat -nat|grep -i "\:$ListenPort "|grep 'ESTABLISHED' |wc -l`
#监控进程id
JPROID=`ps axu|grep $ProRemark|grep -v grep|awk '{print $2}'|head -1`
#监控进程cpu占用
JCPU=`top -b -n 2 | grep "$JPROID" | awk '{print $9}'|awk 'NR==2{print}' | cut -f 1 -d '%'`
#监控进程内存占用
JMEM=`top -b -n 1 | grep "$JPROID" | awk '{print $10}'`
#系统cpu占用比
SYSCPU=`top -b -n 2 | grep Cpu|awk '{print $3}' |awk 'NR==2{print}' | cut -f 1 -d '%'`
#系统总内存
TOTALSYSMEM=`free -m |grep Mem|awk '{print $2}'`
#系统当前使用内存
USESYSMEM=`free -m |grep "\-\/\+" |awk '{print $3}'`
#当前时间
TIME=`date +%F" "%H:%M:%S`
#生成监控名
FILE=$LogSave/`date +%y%m%d`.mon
#磁盘占用
DISK=`df -h|grep $DiskName|grep -o '[0-9]*[0-9]%'| cut -f 1 -d "%"`
#文件句柄数
OPENFILE=`lsof |wc -l`
USED_MEMORY=$[$USESYSMEM*100/$TOTALSYSMEM]

REPORT="告警主机名:$HostName\n告警主机ip:$HostIp\n告警时间:$TIME\n端口$ListenPort活跃数:$COUNT\n被监听进程CPU占比:$JCPU%\n被监听进程内存占比:$JMEM%\n系统CPU占比:$SYSCPU%\n系统内存占比:$USED_MEMORY%\n被监听磁盘占比:$DISK%\n打开文件句柄数:$OPENFILE"
#MAX=0
#echo -e $REPORT
if [ ! -f $FILE ]; then
 touch  $FILE
 #echo "时间   |  当前并发数| 并发最大数  | 程序cpu  |程序mem">>$FILE
fi
if [ `echo "$SYSCPU > $JCPUMax"|bc` -eq 1 ]; then

#  echo "${JCPU}test$JCPUMax"
    echo -e $REPORT|mailx -s $MailName$HostName -c $MailCopies $MailReceives 
fi

if [ `echo "$USED_MEMORY > $MEMMax"|bc` -eq 1 ]; then

#  echo "${JCPU}test$JCPUMax"
    echo -e $REPORT|mailx -s $MailName$HostName -c $MailCopies $MailReceives 
fi

if [ `echo "$DISK > $DISKMax"|bc` -eq 1 ]; then

#  echo "${JCPU}test$JCPUMax"
    echo -e $REPORT|mailx -s $MailName$HostName -c $MailCopies $MailReceives 
fi


#echo -e $REPORT>>$FILE
支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章