SharePlex实例自动发现并检查状态发现问题自动发送邮件

第一部分 README 

1.开始检测
脚本作用:
(1)会在脚本所在目录创建splex_check_log目录
(2)用于存放生成的SharePlex_Report_开头的log文件,记录SharePlex实例情况
(3)默认间隔20分钟执行一次,可通过修改脚本interval参数更改执行频率
(4)会自动删除三天前或者当日志目录超过50M会自动删除目录重建
(5)该脚本自动调用目录下check_shareplex_health.sh脚本
(6)脚本执行步骤如下
chmod u+x start_check.sh
chmod u+x stop_check.sh
chmod u+x check_shareplex_health.sh
./start_check.sh &

2.停止脚本使用如下脚本
脚本作用:
(1)找出执行脚本进程并执行kill命令
./stop_check.sh

3.check_shareplex_health.sh脚本说明
(1)该脚本为start_check.sh脚本最终调用巡检脚本
(2)邮箱发送告警功能默认为注释状态,如果告警发送邮件,则可以编辑check_shareplex_health.sh脚本
        a.配置服务器sendmail功能,确保服务器可以发送邮件
        b.去掉check_shareplex_health.sh开头邮件部分注释
        c.修改MailUserName变量为需要发送邮件地址,并将48行管道符前面注释#去掉,就可以使用邮件功能

第二部分 start_check.sh

#!/bin/bash
# Created by czh version v1.0
# This script was used to check SharePlex Instance health.
# This Script was created on RHEL 7.6 Platform.

v_log_dir_name=splex_check_log
v_num_cop=`ps -ef|grep sp_cop|grep -v grep|awk '{print $2}'|wc -l`  # 统计sp_cop数量

if [ ${v_num_cop} -le 0 ];then        # 判断是否存在sp_cop进程,如果不存在,提示并退出执行
    echo -e "\n**************************************************************"
    echo -e "        !!!No SharePlex Instance,Please Check!!!              "
    echo -e "Please Check SharePlex Instance,The Sp_cop Process Not Active!"
    echo -e "**************************************************************\n"
else
    echo -e "\n######################################################################################################################"
    echo -e "\nStarting Check"
    echo -e "`date +%A' '%F' '%H:%M:%S`\n"
    echo -e "######################################################################################################################\n"
    while true
    do
        v_dirname=`dirname $0`             # 通过特殊变量$0取脚本名称,使用dirname取路径,确保下面创建文件在脚本所在路径
        if [ -d "${v_dirname}/${v_log_dir_name}" ];then
            echo "Notice: splex_check_log directory already exist,will continue."
        else
            mkdir -p ${v_dirname}/${v_log_dir_name}
        fi
        interval=1200
        log_name=shareplex_check
        v_date=`date +%A-%F-%H%M%S`
        ${v_dirname}/check_shareplex_health.sh >> ${v_dirname}/${v_log_dir_name}/${log_name}_${v_date}.log &	                # 调用check_shareplex_health.sh脚本完成检查
        v_dir_size=`du -sk "${v_dirname}/${v_log_dir_name}"/|awk '{print $1}'`
        echo ${v_file_size}
            if [ ${v_dir_size} -ge 51200 ];then
                rm -rf ${v_dirname}/${v_log_dir_name}
            fi
        sleep ${interval}
    done
fi

第三部分 check_shareplex_health.sh

#!/bin/bash
# Created by czh version v1.0
# This script was used to check SharePlex Instance health.
# This Script was created on RHEL 7.6 Platform.

# 如果需要发送邮件,则将下面部分以及49行注释去掉,在下面部分输入正确的邮件地址即可。
############################################################################################################################################ 
#MailUserName='yourname@yourcompany'         # 如果需要发送邮件,则需要输入邮箱地址,多个邮箱地址以单引号括起来,逗号隔开'addr1','addr2'
#if [ "$MailUserName" = "yourname@yourcompany" ]
#  then
#    echo "Please modify the script so it has a valid email address"
#    exit 0
#fi
############################################################################################################################################

# Start Scripts

v_cop=`ps -ef|grep sp_cop|grep -v grep|awk '{print $2}'`   # 获取操作系统sp_cop主进程
v_num_cop=`ps -ef|grep sp_cop|grep -v grep|awk '{print $2}'|wc -l`  # 统计sp_cop数量
i=1     # 计数,用于后面循环判断当前服务器有多少个SharePlex实例

while [ $i -le ${v_num_cop} ]
do
    v_pid=`echo ${v_cop}|awk -v v_i="${i}" '{print $v_i}'`  # awk中使用-v选项可以使用自定义变量,获取sp_cop os pid
    v_script_name=`echo $0`
    v_dirname=`dirname ${v_script_name}`             # 通过特殊变量$0取脚本名称,使用dirname取路径,确保下面创建文件在脚本所在路径
    v_sp_ipaddr=`netstat -anp|grep tcp|grep ${v_pid}|awk '{print $4}'`  # 根据获取的pid,使用netstat获取ip地址以及端口
    SP_SYS_HOST_NAME=`echo ${v_sp_ipaddr%:*}`  # 根据获取的pid,使用netstat获取ip地址并赋给变量SP_SYS_HOST_NAME
    SP_PORT=`echo ${v_sp_ipaddr##*:}`        # 根据netstat获取到的IP地址端口信息获取sp_cop端口号
    SP_PRODIR=`ps -ef|grep sp_cop|grep -v grep|grep ${v_pid}|awk '{print $8}'|cut -d '.' -f1|sed 's/\/$//'` # 根据pid取出每个sp_cop进程prodir路径
    SP_SYS_VARDIR=`ls -l /proc/${v_pid}/cwd|awk '{print $11}'|sed -n 's/\/dump$//p'` # 根据sp_cop进程pid,利用cwd获取vardir目录并赋值给SP_SYS_HOST_NAME
    export SP_SYS_VARDIR
    export SP_SYS_HOST_NAME
    ${SP_PRODIR}/bin/sp_ctrl > ${v_dirname}/splex_temp.log <<EOF         # 利用show、version full命令获取进程状态以及软件版本
                                     show
                                     version full
                                     exit
EOF
    v_sp_version=`cat ${v_dirname}/splex_temp.log|grep -i "Version"`       # 获取软件版本,便于后面输出版本信息
    v_err_count=`egrep -i '(^Stopping|Aborting|Idle|Stopped by user|error)' ${v_dirname}/splex_temp.log |wc -l`   # 统计进程不处于Running状态条目
        if [ ${v_err_count} -eq 0 ];then     # 如果不为Running状态为0,则进程正常或者没有任何进程,表示实例正常
            echo -e "\n*********************************************"
            echo -e "`date +%A' '%F' '%H:%M:%S`"
            echo -e " SharePlex All Process Was Running         "
            echo -e "*********************************************"
        else
            echo -e "\n*********************************************"
            echo -e "         !!!     Warnings    !!!"
            echo -e " SharePlex Process Has Problems,Please Check!"
            echo -e "SharePlex Warnings ${SP_SYS_HOST_NAME}:${SP_PORT} Has Problems." #|mail -s 'SharePlex Warnings!' ${MailUserName}    # 需要使用邮件功能,将管道符前面#注释字符去掉
            echo -e "     `date +%A' '%F' '%H:%M:%S`           "
            echo -e "*********************************************"
        fi
    echo -e "\n****************************************************************************************"
    echo -e " SharePlex Instance ${SP_PORT} Bind IP Address Is      : ${SP_SYS_HOST_NAME}:${SP_PORT}"
    echo -e " SharePlex Product Directory Is                  : ${SP_PRODIR}"
    echo -e " SharePlex Version Is                            : ${v_sp_version}"
    echo -e " SharePlex Instance Vardir Directory Is          : ${SP_SYS_VARDIR}"
    echo -e " SharePlex Instance Cop Process Identifier Is    : ${v_pid}"
    echo -e "             `date +%A' '%F' '%H:%M:%S`"
    echo -e "****************************************************************************************\n"
    i=$(($i+1))
done
    rm -f ${v_dirname}/splex_temp.log
    echo -e "\n######################################################################################################################"
    echo -e "\nFinished check SharePlex instance!"
    echo -e "`date +%A' '%F' '%H:%M:%S`\n"
    echo -e "######################################################################################################################\n"

#exit 0

# End Scripts

第四部分 stop_check.sh

#!/bin/bash
# Created by czh version v1.0
# This script was used to check SharePlex Instance health.
# This Script was created on RHEL 7.6 Platform.

kill -9 `ps -ef|grep check_shareplex_health.sh|grep -v grep|awk '{print $2}'` 2>/dev/null
kill -9 `ps -ef|grep start_check.sh|grep -v grep|awk '{print $2}'` 2>/dev/null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值