简介
本文将监控程序集成到了RocketMq-console中,环境是liunx环境,邮箱是采用了阿里云的邮箱推送服务,原理很简单就是通过运行liunx命令来监测mqbroker进程是否存在,不存在即判断为磊机,然后运行命令重启,无论重启成功与否都会发送邮件报警,这里只做了磊机监控报警,至于其他堆积量报警什么的RocketMq-console里面是可以配置的
代码实现
/**
* @Author colins
* @Description 定时监控RocketMq broker是否磊机 磊机则重启并告警
* @Date 2020/12/2 10:14
* @Param []
* @return void
**/
@Scheduled(cron="0 0/5 * * * *")
public void process(){
boolean brokerStatus = mqBrokerStatus("org.apache.rocketmq.broker.BrokerStartup");
if(!brokerStatus){
//重启mqbroker
restartBroker();
try {
//等待5s 给broker重启时间
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//重启后再判断一次mqbroker的状态并报警
boolean restartBrokerStatus = mqBrokerStatus("org.apache.rocketmq.broker.BrokerStartup");
if(!restartBrokerStatus){
//此处为阿里云邮箱推送不再贴出,各位自行替换为自己的报警方式
AliyunEmailPush.sendMail("xxx邮箱","RocketMQ Status",
"RocketMQ 磊机重启失败,请及时查看");
logger.info("RocketMQ 磊机重启失败,请及时查看");
}else {
//此处为阿里云邮箱推送不再贴出,各位自行替换为自己的报警方式
AliyunEmailPush.sendMail("xxx邮箱","RocketMQ Status",
"RocketMQ 磊机重启成功");
logger.info("RocketMQ 磊机重启成功");
}
}else {
logger.info("RocketMQ 状态正常");
}
}
/**
* @Author colins
* @Description 返回broker状态
* @Date 2020/12/2 10:14
* @Param [command]
* @return boolean
**/
private static boolean mqBrokerStatus(String command){
BufferedReader reader =null;
try{
//显示所有进程
Process process = Runtime.getRuntime().exec("ps -aux");
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
boolean mqStatus=false;
while((line = reader.readLine())!=null){
//这里遍历所有进程 查看是否存在broker进程 存在即返回true
if(line.contains(command)){
mqStatus=true;
}
}
return mqStatus;
}catch(Exception e){
e.printStackTrace();
}finally{
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
}
}
}
return false;
}
/**
* @Author colins
* @Description 重启mqbroker 这里启动的是启动mqbroker的脚本
* @Date 2020/12/2 10:12
* @Param []
* @return void
**/
private static void restartBroker(){
try {
Process process = Runtime.getRuntime().exec("sh /root/rocketmq/mqbroker/start.sh");
} catch (IOException e) {
e.printStackTrace();
}
}
注意说明
1.发送邮箱那里自行替换,可以改成短信,邮箱,钉钉都可以
2.这个是针对liunx中单例broker的处理,如果环境中有多个实例需要判断处理
3.启动脚本需要自行验证是否可行
4.这里是5分钟监测一次,有需要可以自行更改
5.如果是一样集成到RocketMq-console中,可以放到下面的文件中,因为这个文件本来就是用来监控的只是被隐藏了