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