首先配置好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