Chinaunix首页 | 论坛 | 博客
  • 博客访问: 419623
  • 博文数量: 121
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-16 16:28
文章分类

全部博文(121)

文章存档

2021年(3)

2018年(1)

2017年(5)

2016年(9)

2015年(23)

2014年(80)

我的朋友

分类:

2017-09-15 14:35:10

原文地址:shell 监控脚本 短信告警 作者:sun5411

shell 监控脚本 短信告警
2010-10-12 13:49

    监控+实时报警

                   自己使用bash shell 编写了一个监控脚本。通过139邮箱,发送邮件,短信及时通知。

                功能描述:通过config.list文件获取各个服务器地址、相应端口、名称,循环检测各个应用的端口健康情况,当发现故障只发送一次告警信息,故障修复后发送一次通知信息(这个地方的逻辑判断有点小复杂,需要仔细阅读才能理解其中的思想)。最后加入crontab每分钟执行一次。


[root@SvrTest script]# cat NBmonirot


#!/bin/bash
# this script is monitor all the server healthy
# created by zhangkai @ hundsun 2010-10-10

#echo `date +%Y%m%d-%T`

WORK_DIR=/root/work/script

cd $WORK_DIR

#############   初始化记录日志文件和状态文件 ##################

if [ ! -e $WORK_DIR/Status.txt ];then

   touch $WORK_DIR/Status.txt
fi

if [ ! -e $WORK_DIR/Alert.log ];then

   touch $WORK_DIR/Alert.log
fi

#############   定义处理函数 ##################

function check_svr
{


        STAT1=`nmap -P0 -n -p$PORT $ADDRESSS |grep tcp |awk '{print $2}'`

        if [[ $STAT1 = "filtered" ]] || [[ $STAT1 = "closed" ]] ;then

            if [ `awk /$ADDRESSS.*$PORT\ / $WORK_DIR/Status.txt |wc -l` -eq 0 ];then

                  sleep 10

                      STAT2=`nmap -P0 -n -p$PORT $ADDRESSS |grep tcp |awk '{print $2}'`

                      if [[ $STAT2 = "filtered" ]] || [[ $STAT2 = "closed" ]] ;then
                                 
                  echo $SVRNAME,$ADDRESSS:$PORT":故障" | mutt -s twioo-$(hostname)

                             echo $ADDRESSS $PORT $STAT2 >> $WORK_DIR/Status.txt

                             echo $(hostname):$(date):$SVRNAME,$ADDRESSS:$PORT":故障" >> $WORK_DIR/Alert.log
                     fi

               fi

         else

               if [ $STAT1 = "open" ];then

                       if [ `awk /$ADDRESSS.*$PORT\ /   $WORK_DIR/Status.txt |wc -l` -eq 1 ];then

         echo $SVRNAME,$ADDRESSS:$PORT":恢复正常" | mutt -s twioo-$(hostname)
                                        
                       cat $WORK_DIR/Status.txt |grep -v "$ADDRESSS $PORT" > $WORK_DIR/tmp.txt

                         rm -rf $WORK_DIR/Status.txt && mv $WORK_DIR/tmp.txt $WORK_DIR/Status.txt

                      echo $(hostname):$(date):$SVRNAME,$ADDRESSS:$PORT" 恢复正常" >> $WORK_DIR/Alert.log

                          fi
             fi

fi

}

############     进入循环列表 检测没个服务器的健康情况 ##############

LINES=`awk 'END{print NR}' configure.list`                                         /* 获取总config.list文件的条目数*/


i=1

while (($i<=$LINES))                                                                       /* 进入循环检测*/


        do

        ADDRESSS=`sed -n "$i"p configure.list | awk -F" " '{print $1}'`    /* 获取地址*/

        PORT=`sed -n "$i"p configure.list | awk -F" " '{print $2}'`             /* 获取端口*/

        SVRNAME=`sed -n "$i"p configure.list | awk -F" " '{print $3}'`     /* 获取服务名称*/

        check_svr                                                                             /* 直接调用 上面定义的函数*/

        i=$(($i+1))
done

#echo `date +%Y%m%d-%T`
               

监控配置文件列表,可自由添加更改。

[root@SvrTest script]# cat configure.list


172.31.1.100    80         nginx_100
172.31.1.101    80         nginx_101
172.31.1.131    80         Wap_131
172.31.1.125    80         Web1
172.31.1.132    80         Web2
172.31.1.136    80         Web3
172.31.1.133    80         Money
172.31.1.104    8000       ASM
172.31.1.104    8001       API

加入crontab ,每分钟执行一次

[root@SvrTest script]#crontab -e

*/1 * * * * /root/work/script/NBmonirot

此脚本纯属个人爱所写,欢迎切磋交流,相互学习。


阅读(734) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~