shell腳本實現Hbase服務的監控報警和自動拉起問題
需求說明
期初是我們的物理機上安裝瞭Hbase,由於物理機硬件配置還可以,1T內存,64核。
隻有4臺機器,我們裝完Hbase後,發現應用請求比較多,導致RegionServer經常掛掉。
但是機器本身資源使用率並不高,因此我們希望在一個節點上啟用多個RegionServer服務。
如果一個節點啟動2個RegionServe服務,那麼通過服務名稱方式就無法監控每個服務,所以改用瞭端口監控的方式。
當服務出現異常掛掉後,可以自動報警,並自動拉起該服務。
1. 通過服務名監控
monitor_regionserver.sh
#!/bin/sh # 必須配置,引入環境變量;不然使用crond 定時執行腳本無法啟動Java應用 source /etc/profile #當前時間 now=`date +"%Y-%m-%d %H:%M:%S"` file_name="/opt/local/listen/monitor.log" #重啟腳本的日志,保證可寫入,保險一點執行 chmod 777 data.log pid=0 hostname=`hostname` proc_num() { num=`ps -ef | grep 'HRegionServer' | grep -v grep | wc -l` return $num } proc_id() { pid=`ps -ef | grep 'HRegionServer' | grep -v grep | awk '{print $2}'` } proc_num #執行proc_num(),獲取進程數 number=$? #獲取上一函數返回值 if [ $number -eq 0 ];then /opt/local/hbase/bin/hbase-daemon.sh start regionserver sleep 5 proc_id echo "${now} 應用服務:HRegionServer不存在,正在重啟服務,進程號 -> ${pid}" >> $file_name #把重啟的進程號、時間 寫入日志 /opt/local/listen/weixin.sh "生產服務器:${hostname} HRegionServer已停止,正在重啟服務,PID -> ${pid}" else proc_id echo "${now} 應用服務:HRegionServer 正常,進程號-> ${pid}" >> $file_name fi
2. 通過端口監控
端口監控有2個腳本,一個是監控腳本listen_port.sh,一個用來執行的腳本monitor_port.sh。
monitor_port.sh可以直接用命令代替。
腳本listen_port.sh,用來監聽指定端口的RegionServer,運行時需要指定端口號。
#!/bin/sh source /etc/profile #指定腳本路徑 script_path=/opt/local/listen/ if [ $# != 2 ];then echo '請輸入端口和Hbase的路徑' exit 1; fi port=$1 hbase_home=$2 echo '正在監聽端口號:' $port #當前時間 now=`date +"%Y-%m-%d %H:%M:%S"` file_name=${script_path}"monitor.log" #重啟腳本的日志,保證可寫入,保險一點執行 chmod 777 data.log pid=0 hostname=`hostname` proc_num() { num=`netstat -nltp | grep ${port} |awk '{print $4}'|grep -v grep|wc -l` return $num } proc_id() { pid=`netstat -nltp | grep ${port} |awk '{print $7}'|cut -d/ -f1` } proc_num #執行proc_num(),獲取進程數 number=$? #獲取上一函數返回值 if [ $number -eq 0 ];then $hbase_home/bin/hbase-daemon.sh start regionserver sleep 5 proc_id echo "${now} 應用服務:HRegionServer不存在,正在重啟服務,端口:${port} 進程號:${pid}" >> $file_name #把重啟的進程號、時間 寫入日志 ${script_path}/weixin.sh "測試服務器:${hostname}:${port} HRegionServer已停止,正在重啟服務,PID -> ${pid}" else proc_id echo "${now} HRegionServer 正常,端口:${port} 進程號:${pid}" >> $file_name fi
腳本monitor_port.sh,用來執行listen_port.sh腳本。
#!/bin/sh source /etc/profile /opt/local/listen/listen_port.sh 16020 /opt/local/hbase/ sleep 1 /opt/local/listen/listen_port.sh 16120 /opt/local/hbase2/
3. 企業微信消息通知腳本
微信報警腳本weixin.sh,將下面的xxxxxxxxx換成自己的key就好。
#!/bin/bash content=${@:1} content=${content//\ /} content=${content//\"/} date=$(date +%Y-%m-%d) time=$(date "+%H:%M:%S") content=" **Hbase** >告警時間:$date.$time >告警詳情:$content " webHookUrl="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxx" content='{"msgtype": "markdown","markdown": {"content": "'$content'","mentioned_list":"@all"},}' echo "content : $content" curl --data-ascii "$content" $webHookUrl echo "over!"
4.定時調度
使用crontab每間隔1分鐘執行一次。
# 監控服務名的 */1 * * * * sh /opt/local/listen/monitor_regionserver.sh >/dev/null 2>&1 # 監控端口的 */1 * * * * sh /opt/local/listen/monitor_port.sh >/dev/null 2>&1
5. 報警信息
報警信息樣式可以自己在weixin.sh中定義,支持markdown寫法。
到此這篇關於shell腳本實現Hbase服務的監控報警和自動拉起的文章就介紹到這瞭,更多相關shell腳本Hbase服務監控報警內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!