RocketMQ 添加监控和系统告警通知

前言

最近由于RocketMQ在使用过程中,发现在某些时候消息堆积,并且还是长时间堆积不消费,这种情况下没能及时发现,导致客户投诉,所以就有给RocketMQ增加监控,当出现特定异常时,能够及时告警,及时处理。
首先提出我们的监控诉求,出现如下情况时,希望能够及时接收到系统告警通知:

  • RocketMQ 服务宕机
  • RocketMQ 消费者下线
  • RocketMQ 消息出现长时间或者大量堆积

本文将通过修改 rocketmq-console源码的方式,增加RocketMQ 消费者下线RocketMQ 消息出现长时间或者大量堆积 监控能力。

1. RocketMQ 服务宕机监控告警

这一级别的监控,本质上而言是监控Linux上启动的Rocket MQ Java进程的运行情况。细分的话,需要监控以下两个维度:

  1. Linux Java 进程的CPU 使用率,内存使用量;
  2. Java 进程本身的JVM的服务质量,GC,并发数,内存分布等
    一般的公司在运维方面会有专门的监控组件,如zabbix会做统一处理

监控的方式有很多,比如简单点的,我们可以写一个shell脚本,监控执行rocketmqJava进程的存活状态,如果rocketmq crash了,发送告警:

#!/bin/bash
## monitor.sh
while true
do
        echo "开始监控rocket broker 进程..."
        PID=$(ps -ef | grep java | grep org.apache.rocketmq.broker.BrokerStartup | awk '{printf $2}');
        if [ -z $PID  ];then
                curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxx' -H 'Content-Type: application/json'  \
                 -d '
                 {"msgtype": "text", 
                         "text": {
                                 "content": "【172.xxx.xxx.xxx】rocketmq broker 进程不存在,可能宕机,请尽快排查!"
                         }
                 }'
        fi
        sleep 10
done

2. RocketMQ的集群组件组成

一个完整的RocketMQ集群,一般组成关系如下图所示:
在这里插入图片描述
除了核心组成部分:Name ServerBroker Cluster 之外,RocketMQ还提供了 mqadmin工具,该工具的具体实现代码在RocketMQ tools模块(rocketmq-tools-xxxx.jar)中。但是mqadmin命令行在交互上不够友好,**rocketmq-console**作为一个社区项目,底层基于mqadmin 核心库,用Spring Boot+Angularjs实现了一个RocketMQ Web管理端,开发运维人员可以轻松地使用此管理端完成日常运维操作。

3. mqadmin–提供一套命令行工具,做RocketMQ的日常管理维护

1.mqadmin 工具在哪儿?

mqadmin本质上是一个Java命令行工具,也就是说执行mqadmin的过程也是执行Java的过程,**mqadmin**的位置和runbrokermqnamesrv并列:
在这里插入图片描述

2.mqadmin能做什么?

执行./mqadmin,会在命令行输出其指令列表:
在这里插入图片描述
具体每个指令的作用不是本文的重点,后续会开新的文章介绍~

4. 使用 rocketmq-console添加MQ监控告警

我们可以利用rocketmq-console做如下的监控:

  • RocketMQ 消费者下线
  • RocketMQ 消息出现长时间或者大量堆积

4.1 rocketmq-console的监控告警功能

作为mqadmin的GUI封装,rocketmq-console基本上具备了mqadmin的功能外,也提供了一些额外的功能,如dashboard面板统计。但是,作为开源源码部分,rocketmq-console将MQ监控功能做了隐藏,我们需要手动放开。如下是使用rocket-console的监控原理:
在这里插入图片描述
当此项功能被放开后,在Consumer菜单下,为每一个consumer-group 的operation 会增加MONITOR CONFIG 选项,如下图所示:
在这里插入图片描述
图中的两个指标:

指标名称 说明 备注
minCount 当前消费分组的机器数量最小阈值,低于此值将会告警
minCount 当前消费分组允许的最大消息堆积量,高于辞职将会告警

4.2 如何开启rocketmq-console的监控告警功能

开源的rocketmq-console将此功能隐藏了,可以通过下载源码,并修改源码的方式支持。

4.2.1 下载源码

从github中获取源码,rocketmq-externals
地址:https://github.com/apache/rocketmq-externals

4.2.2 导入项目

项目导入后,如下图所示,rocketmq-console即为控制台代码
在这里插入图片描述

4.2.3 放开console控制台的监控参数配置

默认的rocketmq-console将此功能注释掉了,修改文件:
~/rocketmq-console/src/resources/static/view/pages/consumer.html,将如下图所示的代码放开即可。
在这里插入图片描述

4.2.4 开启定时任务监控,扫描实时数据,做阈值判断,告警提示

默认情况下,rocketmq-console只定义了定时任务入口,具体的策略没有任何处理,我们需要根据自己的需求加入自身的告警方式,比如:邮箱,钉钉,短信,微信等等。
其预留的定时任务实现类为:
org.apache.rocketmq.console.task.MonitorTask
定时任务的扫描频率可根据自身系统要求考量设置。

@Component
public class MonitorTask {
    private Logger logger = LoggerFactory.getLogger(MonitorTask.class);

    @Resource
    private MonitorService monitorService;

    @Resource
    private ConsumerService consumerService;

//    @Scheduled(cron = "* * * * * ?")
//    定时任务的扫描频率可根据自身系统要求考量设置
    public void scanProblemConsumeGroup() {
        for (Map.Entry<String, ConsumerMonitorConfig> configEntry : monitorService.queryConsumerMonitorConfig().entrySet()) {
            GroupConsumeInfo consumeInfo = consumerService.queryGroup(configEntry.getKey());
            if (consumeInfo.getCount() < configEntry.getValue().getMinCount() || consumeInfo.getDiffTotal() > configEntry.getValue().getMaxDiffTotal()) {
                logger.info("op=look consumeInfo {}", JsonUtil.obj2String(consumeInfo)); 
               // notify the alert system 
               //根据自身的要求加如通知方式
            }
        }
    }

}
4.2.5 build修改后的代码,生成可运行的jar包,然后部署运行

在这里插入图片描述

4.2.6 样例

经笔者改造后的console的控制台可以显示出 ‘MONITOR CONFIG’ 配置项:
在这里插入图片描述
钉钉告警样例:
在这里插入图片描述

5. 总结

rocketmq-console 作为开发运维人员监控MQ的便捷入口,可根据自身要求改造rocketmq-console,rocketmq-console服务本身可以调用所有mqadmin的所有能力,项目本身基于angularjs +spring boot,作为java 开发人员来说拓展成本也比较低。不过前期需要对rocketmq的一些概念和各种衡量标准要有明确的认知。

本文没有对’mqadmin’的具体指令和设计原理展开,将另开文章解释,有兴趣的可关注下,敬请期待~

另外作者已开通微信订阅号,精品文章同步更新,欢迎关注~
亦山札记公众号

展开阅读全文

Windows版YOLOv4目标检测实战:训练自己的数据集

04-26
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值