zoukankan      html  css  js  c++  java
  • shell脚本监测elasticsearch集群节点

    1、监测方案:

    通过shell可配置化脚本,配置es集群中节点,然后通过shell中执行crul命令监测集群中所有节点是否正常,如果监测到节点不正常,那么就保存节点ip地址和端口号等信息,将异常的集群节点信息通过邮件通知管理员,让管理员尽快登陆服务器查看和解决集群中有问题的节点。

    2、监测脚本:

    脚本的大致思路就是在配置文件中配置集群中所有节点的ip和端口号,以及有异常要通知的管理员邮箱地址、邮件标题、邮件内容等。通过在sh脚本中遍历配置的集群节点的ip和端口号利用curl命令进行访问,监测该节点是否可以访问正常,如果有节点异常,那么就记录下节点ip和端口号,最终将所有异常节点信息邮件发送给配合的若干个管理员。

    具体脚本如下:

    (1)配置文件:

    ipAddressAndPorts=192.168.99.164:9200,192.168.99.165:9200
    curlPath=/usr/bin/curl
    semdEmailTo=1123476897809@qq.com
    sendEmailTitle=测试ES备份异常标题
    sendEmailContent=测试ES备份异常内容。

    (2)代码:

    注意:不同linux设备的sh路径可能不同,需通过which sh查看sh的绝对路径修改即可。

    #!/bin/sh
    #db_backups_conf.txt文件路径
    db_backups_conf="/wocloud/shell/es_cluster_config.txt"
     
    #判断文件是否存在
    if [ -f "${db_backups_conf}" ];then
        
        echo $(date +'%Y-%m-%d %H:%M:%S')" 发现文件配置信息文件存在"
     
        #获取等号前内容,作为map中的Key值
        dbArrOne=($(awk -F'[=]' '{print $1}' ${db_backups_conf} ))
        
        #获取等号后内容,作为map中的value值
        dbArrTwo=($(awk -F'[=]' '{print $2}' ${db_backups_conf}))
     
        #创建一个空map
        declare -A map=()
        
        #通过循环,将db_backups_conf配置文件中的信息存储在map中
        for((i=0;i<${#dbArrOne[@]};i++))
        do
            map[${dbArrOne[i]}]=${dbArrTwo[i]}
        done    
     
        #获取要监测集群节点IP和端口号组合的字符串
        ipPortsStr=${map["ipAddressAndPorts"]}
        
        #获取收件人的邮件账号的字符串
        semdEmailTo=${map["semdEmailTo"]}
        
        #获取默认的字符串分隔符
        old_ifs="$IFS"
        
        #设置字符串分隔符为逗号
        IFS=","
     
        #将要备份的索引名称value值的字符串进行分隔,获取一个数组
        ipPortArr=($ipPortsStr)
        
        #将收件人的邮件账号value值的字符串进行分隔,获取一个数组
        semdEmailToArr=($semdEmailTo)
     
        #将字符串的分隔符重新设置为默认的分隔符
        IFS="$old_ifs"
        
        
        #定义一个是否需要发送异常提醒邮件变量
        isSendEmailStr=0
        
        #定义一个出现异常集群节点ip和端口号存储的变量
        errorIpPort=""
        
        #执行命令,备份es数据
        {
        
            #遍历备份索引名称,逐个删除旧备份,重新全量备份
            for ipPort in ${ipPortArr[@]};
            do
            
                #检测es访问地址是否有效
                esStatus=$(curl -s -m 5 -IL http://${ipPort}|grep 200)
                if [ "$esStatus" == "" ];then
                
                    echo $(date +'%Y-%m-%d %H:%M:%S')" es地址访问异常:"${ipPort}
                    isSendEmailStr=1
                    errorIpPort=${errorIpPort}""${ipPort}","
                
                fi
                
            
            done
            
        } || {
            isSendEmailStr=1
        }
        
     
        #判断命令执行是否有异常,如果有异常就发送邮件
        if [ ${isSendEmailStr} == "0" ];then
                echo $(date +'%Y-%m-%d %H:%M:%S')" 执行es集群节点监测全部正常"
            else 
                echo $(date +'%Y-%m-%d %H:%M:%S')" 执行es集群节点监测有异常,开始发送邮件通知管理员"
                
                #遍历收件人的邮箱地址,逐个发送邮件
                for email in ${semdEmailToArr[@]};
                do
                    echo $(date +'%Y-%m-%d %H:%M:%S')" 开始发送邮件:"${email}
     
                    echo ""${map["sendEmailContent"]}",异常节点信息如下:"${errorIpPort} | mail -s ""${map["sendEmailTitle"]} ${email}
                done
                
                echo $(date +'%Y-%m-%d %H:%M:%S')" 执行es集群节点监测有异常,成功发送邮件通知管理员"
        fi
        
        echo $(date +'%Y-%m-%d %H:%M:%S')" 脚本执行完毕"
     
     
    else
        echo "文件不存在"
    fi

    (3)配置参数说明:

    参数意义如下:
    ipAddressAndPorts=节点IP:端口号,多个节点用逗号分隔,注意冒号、逗号都必须是英文的
    curlPath=命令curl绝对路径
    semdEmailTo=收件人邮箱,多个收件人邮箱用逗号隔开
    sendEmailTitle=测试邮件主题(文本内容中一定不能包含=)
    sendEmailContent=测试邮件内容(文本内容中一定不能包含=)

    (4)注意事项说明

    使用注意事项:
    1、默认的是.sh、.txt文件都要放在/woclod/shell脚本下,如果放置的路径变了,需要修改.sh中读取.txt配置文件的路径
    2、备份异常发送邮件提醒采用的是mail,运行的linux上提前先安装好mail并配置到mail.rc发送邮件的信息才可以。
  • 相关阅读:
    Linux DNS配置
    SqlCommandBuilder 为SqlDataAdapter 提供 update、insert、delete 命令(自己利用select命令自动从数据库元数据推断)
    Dev中GridView——事件
    select 动态赋值 layui重新渲染
    url-loader和file-loader的区别和使用
    Fetch API
    Fetch API
    FormData上传文件
    Buffer、ArrayBuffer互转
    if exists用法(判断对象的用法)
  • 原文地址:https://www.cnblogs.com/xiaozengzeng/p/13168562.html
Copyright © 2011-2022 走看看