shell脚本实现Hbase服务的监控报警和自动拉起问题

 更新时间:2022年11月09日 14:13:00   作者:时间的往事  
这篇文章主要介绍了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服务监控报警内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux 中ls命令详解

    linux 中ls命令详解

    ls命令是linux下最常用的命令。ls命令就是list的缩写。下面通过本文给大家分享linux 中ls命令详解,感兴趣的朋友一起看看吧
    2017-09-09
  • 虚拟机中使用linux系启用文件共享之后的文件存在的位置方法

    虚拟机中使用linux系启用文件共享之后的文件存在的位置方法

    下面小编就为大家带来一篇虚拟机中使用linux系启用文件共享之后的文件存在的位置方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • shell脚本自动检测网络掉线和自动重连

    shell脚本自动检测网络掉线和自动重连

    这篇文章主要介绍了shell脚本自动检测网络掉线和自动重连,这篇文章介绍的是自动检测连接网络的解决方法,需要的朋友可以参考下
    2019-12-12
  • Shell脚本中if条件判断的写法实例

    Shell脚本中if条件判断的写法实例

    在写shell脚本的过程中,用到了if else的写法,突然有多个参数需要判断,那么就想到了if else if的用法,这篇文章主要给大家介绍了关于Shell脚本中if条件判断写法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • Shell脚本if else语句小结

    Shell脚本if else语句小结

    这篇文章主要介绍了Shell脚本if else语句小结,总结了Shell脚本中的if控制语句和其它语言的不同,常见的3种写法等,需要的朋友可以参考下
    2014-07-07
  • shell命令执行hive脚本(hive交互)

    shell命令执行hive脚本(hive交互)

    本文主要介绍了shell命令执行hive脚本(hive交互),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • shell脚本开头#!/bin/bash的作用详解

    shell脚本开头#!/bin/bash的作用详解

    在Shell脚本中,#!/bin/bash 是指定脚本使用 Bash 解释器的 shebang 语句,它出现在脚本的第一行,并告诉操作系统使用 Bash 解释器来执行该脚本,这篇文章主要介绍了shell脚本开头#!/bin/bash的作用详解,需要的朋友可以参考下
    2023-12-12
  • 通过shell脚本循环进入目录执行命令的方法

    通过shell脚本循环进入目录执行命令的方法

    今天小编就为大家分享一篇通过shell脚本循环进入目录执行命令的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Linux中rpm命令用法详解

    Linux中rpm命令用法详解

    rpm命令是用于在基于RPM包管理系统的Linux发行版中安装、查询、升级和删除软件包的命令行工具,本文讲给大家详细的介绍一下Linux rpm命令的使用方法,感兴趣的同学跟着小编一起来看看吧
    2023-08-08
  • shell判断文件是否为空的代码

    shell判断文件是否为空的代码

    这篇文章主要介绍了shell判断文件是否为空的代码,需要的朋友可以参考下
    2017-05-05

最新评论