报警shell脚本浅写

2019-01-18  本文已影响0人  fly先森

在企业的大数据系统中,会存在许许多多的shell监控脚本对集群的各种指标进行监控和报警。

1.编写mysql数据库监控

            #!/bin/bash
            #mysql.sh
                      #这一行是连接数据库的操作
            nc -e 3 localhost 3306 &>/dev/null

                     #$?是上一行代码操作成功与否,成功不等于1,否则等于0
            if [ $? -eq 0 ];then

                    str="mysql server status Running!!!"

            else

                    str="mysql server status Shuting!!!"

            fi

            echo $str | mail -s 'mysql server' admin@g.cn

2.编写Disk硬盘空间监控

            #!/bin/bash
            #disk.sh                         
                      #df查看磁盘占用情况  NR==7是第七行 每一行默认空格划分所以$5就是占用率
            ds=`df |awk '{if(NR==7){print int($5)}}'`   

            if [ $ds -lt 45 ];then

                   str="disk space is less than 45%!!!"

            else

                   str="disk space is greater than 45%!!!"

            fi

            echo $str | mail -s 'linux server disk space' admin@g.cn

3.编写mem(内存)空间监控脚本

            #!/bin/bash

            #mem.sh

            mem=`free -m |awk '{if(NR==2){printf("%.0f\n",(int($3)/int($2))*100)}}'` //四舍五入取整

            if [ $mem -lt 45 ];then //表达式内为整数表达式,不能用浮点型

                   str="mem space is less than 45%,Achieve $mem%!!!"

            else

                   str="mem space is greater than 45%,Achieve $mem%!!!"   

            fi

            echo $str | mail -s 'linux server mem space' admin@g.cn

4、报警脚本重启生效

          1)设置脚本权限

            chmod 755 /etc/init.d/mon.sh    //mon.sh:将所有脚本放到这个脚本中,或者调用其他脚本,发送一封邮件即可

          2)crontab -e                //任务计划

            */5****bash /etc/init.d/mon.sh

            如:10 13 *** /mnt/monitor.dh      //每天的13:10执行这个代码

          3)tail -f /var/log/cron

          4)邮件报警要提前测试准备邮件系统是否正常工作

上述几个是网上的一些小demo,也是报警脚本的一个小入门,下面贴一份在某大型互联网的部分代码(部分公司信息已手动去除):

unction hdfs() {
    
    JAVA_HOME="/home/work/software/java"
    HADOOP_HOME="/home/work/software/hadoop"
    
    PROCESS=`${JAVA_HOME}/bin/jps | grep -iE "datanode|avatardatanode" | wc -l`   //拿到相关的进程数
    PORT=`/bin/netstat -nl | grep -E "50020|50010" | wc -l`  //拿到相关的端口数
    
    if [[ $PROCESS -gt 0 ]] || [[ $PORT -gt 0 ]]
    then
        echo "Normal."

    elif [[ "$PROCESS" == '0' ]] || [[ "$PORT" == '0' ]]
    then
        echo "auto restart service."
        if [ -f "${HADOOP_HOME}/conf/hdfs-site.xml" ]
        then
            is_master="`grep image $HADOOP_HOME/conf/hdfs-site.xml`"
            if [ "$is_master" == '' ]
            then
                is_dn=`/usr/bin/curl --user ***:**** -d "interface=hdfs" -d "ip=$ip_list" $ReportCenter -s`
                if [ "$is_dn" == 'datanode' ]
                then
                    hdfs_dn_type="`grep avatar ${HADOOP_HOME}/conf/hdfs-site.xml`"
                    if [ "$hdfs_dn_type" == '' ]
                    then
                        su - work -c "~/software/hadoop/bin/hadoop-daemon.sh start datanode" //su -work -c  代表切换到work用户并执行命令
                    else
                        su - work -c "~/software/hadoop/bin/hadoop-daemon.sh start avatardatanode"
                    fi
                fi
            else
                echo "Master Node!"
            fi
        fi
    else
        reportAlarm hdfs statuserror
    fi
}

hdfs

其实监控脚本本质还是对一些linux命令的掌握以及根据公司的业务需求对集群的一些指标进行实时查询,从而达到业务集群的稳定性,当然编写脚本的时候请保持每行空格对齐,代码的美观可以让我们身心愉悦( ̄▽ ̄)/

上一篇下一篇

猜你喜欢

热点阅读