前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RocketMQ 添加监控和系统告警通知

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

作者头像
亦山
发布2019-05-25 09:50:00
2.2K0
发布2019-05-25 09:50:00
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1432219

前言

最近由于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了,发送告警:

代码语言:javascript
复制
#!/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

定时任务的扫描频率可根据自身系统要求考量设置。

代码语言:javascript
复制
@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’的具体指令和设计原理展开,将另开文章解释,有兴趣的可关注下,敬请期待~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. RocketMQ 服务宕机监控告警
  • 2. RocketMQ的集群组件组成
  • 3. mqadmin–提供一套命令行工具,做RocketMQ的日常管理维护
    • 1.mqadmin 工具在哪儿?
      • 2.mqadmin能做什么?
      • 4. 使用 rocketmq-console添加MQ监控告警
        • 4.1 rocketmq-console的监控告警功能
          • 4.2 如何开启rocketmq-console的监控告警功能
            • 4.2.1 下载源码
            • 4.2.2 导入项目
            • 4.2.3 放开console控制台的监控参数配置
            • 4.2.4 开启定时任务监控,扫描实时数据,做阈值判断,告警提示
            • 4.2.5 build修改后的代码,生成可运行的jar包,然后部署运行
            • 4.2.6 样例
        • 5. 总结
        相关产品与服务
        命令行工具
        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档