網(wǎng)站首頁 編程語言 正文
shell腳本實(shí)現(xiàn)Hbase服務(wù)的監(jiān)控報(bào)警和自動(dòng)拉起問題_linux shell
作者:時(shí)間的往事 ? 更新時(shí)間: 2022-12-09 編程語言需求說明
期初是我們的物理機(jī)上安裝了Hbase,由于物理機(jī)硬件配置還可以,1T內(nèi)存,64核。
只有4臺(tái)機(jī)器,我們裝完Hbase后,發(fā)現(xiàn)應(yīng)用請(qǐng)求比較多,導(dǎo)致RegionServer經(jīng)常掛掉。
但是機(jī)器本身資源使用率并不高,因此我們希望在一個(gè)節(jié)點(diǎn)上啟用多個(gè)RegionServer服務(wù)。
如果一個(gè)節(jié)點(diǎn)啟動(dòng)2個(gè)RegionServe服務(wù),那么通過服務(wù)名稱方式就無法監(jiān)控每個(gè)服務(wù),所以改用了端口監(jiān)控的方式。
當(dāng)服務(wù)出現(xiàn)異常掛掉后,可以自動(dòng)報(bào)警,并自動(dòng)拉起該服務(wù)。
1. 通過服務(wù)名監(jiān)控
monitor_regionserver.sh
#!/bin/sh
# 必須配置,引入環(huán)境變量;不然使用crond 定時(shí)執(zhí)行腳本無法啟動(dòng)Java應(yīng)用
source /etc/profile
#當(dāng)前時(shí)間
now=`date +"%Y-%m-%d %H:%M:%S"`
file_name="/opt/local/listen/monitor.log" #重啟腳本的日志,保證可寫入,保險(xiǎn)一點(diǎn)執(zhí)行 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 #執(zhí)行proc_num(),獲取進(jìn)程數(shù)
number=$? #獲取上一函數(shù)返回值
if [ $number -eq 0 ];then
/opt/local/hbase/bin/hbase-daemon.sh start regionserver
sleep 5
proc_id
echo "${now} 應(yīng)用服務(wù):HRegionServer不存在,正在重啟服務(wù),進(jìn)程號(hào) -> ${pid}" >> $file_name #把重啟的進(jìn)程號(hào)、時(shí)間 寫入日志
/opt/local/listen/weixin.sh "生產(chǎn)服務(wù)器:${hostname} HRegionServer已停止,正在重啟服務(wù),PID -> ${pid}"
else
proc_id
echo "${now} 應(yīng)用服務(wù):HRegionServer 正常,進(jìn)程號(hào)-> ${pid}" >> $file_name
fi
2. 通過端口監(jiān)控
端口監(jiān)控有2個(gè)腳本,一個(gè)是監(jiān)控腳本listen_port.sh,一個(gè)用來執(zhí)行的腳本monitor_port.sh。
monitor_port.sh可以直接用命令代替。
腳本listen_port.sh,用來監(jiān)聽指定端口的RegionServer,運(yùn)行時(shí)需要指定端口號(hào)。
#!/bin/sh
source /etc/profile
#指定腳本路徑
script_path=/opt/local/listen/
if [ $# != 2 ];then
echo '請(qǐng)輸入端口和Hbase的路徑'
exit 1;
fi
port=$1
hbase_home=$2
echo '正在監(jiān)聽端口號(hào):' $port
#當(dāng)前時(shí)間
now=`date +"%Y-%m-%d %H:%M:%S"`
file_name=${script_path}"monitor.log" #重啟腳本的日志,保證可寫入,保險(xiǎn)一點(diǎn)執(zhí)行 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 #執(zhí)行proc_num(),獲取進(jìn)程數(shù)
number=$? #獲取上一函數(shù)返回值
if [ $number -eq 0 ];then
$hbase_home/bin/hbase-daemon.sh start regionserver
sleep 5
proc_id
echo "${now} 應(yīng)用服務(wù):HRegionServer不存在,正在重啟服務(wù),端口:${port} 進(jìn)程號(hào):${pid}" >> $file_name #把重啟的進(jìn)程號(hào)、時(shí)間 寫入日志
${script_path}/weixin.sh "測試服務(wù)器:${hostname}:${port} HRegionServer已停止,正在重啟服務(wù),PID -> ${pid}"
else
proc_id
echo "${now} HRegionServer 正常,端口:${port} 進(jìn)程號(hào):${pid}" >> $file_name
fi
腳本monitor_port.sh,用來執(zhí)行l(wèi)isten_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. 企業(yè)微信消息通知腳本
微信報(bào)警腳本weixin.sh,將下面的xxxxxxxxx換成自己的key就好。
#!/bin/bash
content=${@:1}
content=${content//\ /}
content=${content//\"/}
date=$(date +%Y-%m-%d)
time=$(date "+%H:%M:%S")
content="
**Hbase**
>告警時(shí)間:$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.定時(shí)調(diào)度
使用crontab每間隔1分鐘執(zhí)行一次。
# 監(jiān)控服務(wù)名的
*/1 * * * * sh /opt/local/listen/monitor_regionserver.sh >/dev/null 2>&1
# 監(jiān)控端口的
*/1 * * * * sh /opt/local/listen/monitor_port.sh >/dev/null 2>&1
5. 報(bào)警信息
報(bào)警信息樣式可以自己在weixin.sh中定義,支持markdown寫法。
原文鏈接:https://www.cnblogs.com/30go/p/16873424.html
相關(guān)推薦
- 2022-07-19 Python數(shù)據(jù)分析?Numpy?的使用方法_python
- 2022-09-27 詳解Django中CSRF和CORS的區(qū)別_python
- 2022-03-14 spring junit 做單元測試,報(bào) Failed to load ApplicationCon
- 2022-03-23 C語言實(shí)現(xiàn)貪吃蛇小黑窗_C 語言
- 2023-08-30 liunx shell腳本并發(fā)控制詳解
- 2022-09-22 GoFrame garray使用實(shí)踐
- 2022-10-17 Python速成篇之像selenium一樣操作電腦詳解_python
- 2022-11-17 Android形狀圖形與狀態(tài)列表圖形及九宮格圖片超詳細(xì)講解_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支