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發送郵件的信息才可以。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM