基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台

简介: 本文将对 RocketMQ-Exporter 的设计实现做一个简单的介绍,读者可通过本文了解到 RocketMQ-Exporter 的实现过程,以及通过 RocketMQ-Exporter 来搭建自己的 RocketMQ 监控系统。RocketMQ 在线可交互教程现已登录知行动手实验室,PC 端登录 start.aliyun.com 即可直达。

头图.png

作者 | 陈厚道  冯庆
来源 | 阿里巴巴云原生公众号

导读:本文将对 RocketMQ-Exporter 的设计实现做一个简单的介绍,读者可通过本文了解到 RocketMQ-Exporter 的实现过程,以及通过 RocketMQ-Exporter 来搭建自己的 RocketMQ 监控系统。RocketMQ 在线可交互教程现已登录知行动手实验室,PC 端登录 start.aliyun.com 即可直达。

RocketMQ 云原生系列文章:

  • 阿里的 RocketMQ 如何让双十一峰值之下 0 故障
  • 当 RocketMQ 遇上 Serverless,会碰撞出怎样的火花?
  • 云原生时代 RocketMQ 运维管控的利器 - RocketMQ Operator
  • 云原生时代消息中间件的演进路线
  • 基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台(本文)

RocketMQ-Exporter 项目的 GitHub 地址:
https://github.com/apache/rocketmq-exporter

文章主要内容包含以下几个方面:

  1. RocketMQ 介绍
  2. Prometheus 简介
  3. RocketMQ-Exporter 的具体实现
  4. RocketMQ-Exporter 的监控指标和告警指标
  5. RocketMQ-Exporter 使用示例

RocketMQ 介绍

RocketMQ 是一个分布式消息和流数据平台,具有低延迟、高性能、高可靠性、万亿级容量和灵活的可扩展性。简单的来说,它由 Broker 服务器和客户端两部分组成,其中客户端一个是消息发布者客户端(Producer),它负责向 Broker 服务器发送消息;另外一个是消息的消费者客户端(Consumer),多个消费者可以组成一个消费组,来订阅和拉取消费 Broker 服务器上存储的消息。

正由于它具有高性能、高可靠性和高实时性的特点,与其他协议组件在 MQTT 等各种消息场景中的结合也越来越多,应用越来越广泛。而对于这样一个强大的消息中间件平台,在实际使用的时候还缺少一个监控管理平台。

当前在开源界,使用最广泛监控解决方案的就是 Prometheus。与其它传统监控系统相比较,Prometheus 具有易于管理,监控服务的内部运行状态,强大的数据模型,强大的查询语言 PromQL,高效的数据处理,可扩展,易于集成,可视化,开放性等优点。并且借助于 Prometheus 可以很快速的构建出一个能够监控 RocketMQ 的监控平台。

Prometheus 简介

下图展示了 Prometheus 的基本架构:

1.png

1. Prometheus Server

Prometheus Server 是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储以及查询。Prometheus Server 可以通过静态配置管理监控目标,也可以配合使用 Service Discovery 的方式动态管理监控目标,并从这些监控目标中获取数据。其次 Prometheus Server 需要对采集到的监控数据进行存储,Prometheus Server 本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。最后 Prometheus Server 对外提供了自定义的 PromQL 语言,实现对数据的查询以及分析。

2. Exporters

Exporter 将监控数据采集的端点通过 HTTP 服务的形式暴露给 Prometheus Server,Prometheus Server 通过访问该 Exporter 提供的 Endpoint 端点,即可获取到需要采集的监控数据。RocketMQ-Exporter 就是这样一个 Exporter,它首先从 RocketMQ 集群采集数据,然后借助 Prometheus 提供的第三方客户端库将采集的数据规范化成符合 Prometheus 系统要求的数据,Prometheus 定时去从 Exporter 拉取数据即可。

当前 RocketMQ Exporter 已被 Prometheus 官方收录,其地址为:https://github.com/apache/rocketmq-exporter

2.png

RocketMQ-Exporter 的具体实现

当前在 Exporter 当中,实现原理如下图所示:

3.png

整个系统基于 spring boot 框架来实现。由于 MQ 内部本身提供了比较全面的数据统计信息,所以对于 Exporter 而言,只需要将 MQ 集群提供的统计信息取出然后进行加工而已。所以 RocketMQ-Exporter 的基本逻辑是内部启动多个定时任务周期性的从 MQ 集群拉取数据,然后将数据规范化后通过端点暴露给 Prometheus 即可。其中主要包含如下主要的三个功能部分:

  • MQAdminExt 模块通过封装 MQ 系统客户端提供的接口来获取 MQ 集群内部的统计信息。
  • MetricService 负责将 MQ 集群返回的结果数据进行加工,使其符合 Prometheus 要求的格式化数据。
  • Collect 模块负责存储规范化后的数据,最后当 Prometheus 定时从 Exporter 拉取数据的时候,Exporter 就将 Collector 收集的数据通过 HTTP 的形式在/metrics 端点进行暴露。

RocketMQ-Exporter 的监控指标和告警指标

RocketMQ-Exporter 主要是配合 Prometheus 来做监控,下面来看看当前在 Expoter 中定义了哪些监控指标和告警指标。

  • 监控指标

4.jpg

rocketmq_message_accumulation 是一个聚合指标,需要根据其它上报指标聚合生成。

  • 告警指标

5.jpg

消费者堆积告警指标也是一个聚合指标,它根据消费堆积的聚合指标生成,value 这个阈值对每个消费者是不固定的,当前是根据过去 5 分钟生产者生产的消息数量来定,用户也可以根据实际情况自行设定该阈值。告警指标设置的值只是个阈值只是象征性的值,用户可根据在实际使用 RocketMQ 的情况下自行设定。这里重点介绍一下消费者堆积告警指标,在以往的监控系统中,由于没有像 Prometheus 那样有强大的 PromQL 语言,在处理消费者告警问题时势必需要为每个消费者设置告警,那这样就需要 RocketMQ 系统的维护人员为每个消费者添加,要么在系统后台检测到有新的消费者创建时自动添加。在 Prometheus 中,这可以通过一条如下的语句来实现:

(sum(rocketmq_producer_offset) by (topic) - on(topic)  group_right  sum(rocketmq_consumer_offset) by (group,topic)) 
- ignoring(group) group_left sum (avg_over_time(rocketmq_producer_tps[5m])) by (topic)*5*60 > 0

借助 PromQL 这一条语句不仅可以实现为任意一个消费者创建消费告警堆积告警,而且还可以使消费堆积的阈值取一个跟生产者发送速度相关的阈值。这样大大增加了消费堆积告警的准确性。

RocketMQ-Exporter 使用示例

1. 启动 NameServer 和 Broker

要验证 RocketMQ 的 Spring-Boot 客户端,首先要确保 RocketMQ 服务正确的下载并启动。可以参考 RocketMQ 主站的快速开始来进行操作。确保启动 NameServer 和 Broker 已经正确启动。

2. 编译 RocketMQ-Exporter

用户当前使用,需要自行下载 git 源码编译:

git clone https://github.com/apache/rocketmq-exporter
cd rocketmq-exporter
mvn clean install

3. 配置和运行

RocketMQ-Exporter 有如下的运行选项:

6.jpg

以上的运行选项既可以在下载代码后在配置文件中更改,也可以通过命令行来设置。

编译出来的 jar 包就叫 rocketmq-exporter-0.0.1-SNAPSHOT.jar,可以通过如下的方式来运行。

java -jar rocketmq-exporter-0.0.1-SNAPSHOT.jar [--rocketmq.config.namesrvAddr="127.0.0.1:9876" ...]

4. 安装 Prometheus

首先到 Prometheus 官方下载地址去下载 Prometheus 安装包,当前以 linux 系统安装为例,选择的安装包为 prometheus-2.7.0-rc.1.linux-amd64.tar.gz,经过如下的操作步骤就可以启动 prometheus 进程。

tar -xzf prometheus-2.7.0-rc.1.linux-amd64.tar.gzcd prometheus-2.7.0-rc.1.linux-amd64/./prometheus --config.file=prometheus.yml --web.listen-address=:5555

Prometheus 默认监听端口号为 9090,为了不与系统上的其它进程监听端口冲突,我们在启动参数里面重新设置了监听端口号为 5555。然后通过浏览器访问 http://<服务器 IP 地址>:5555,就可以验证 Prometheus 是否已成功安装,显示界面如下:

7.png

由于 RocketMQ-Exporter 进程已启动,这个时候可以通过 Prometheus 来抓取 RocketMQ-Exporter 的数据,这个时候只需要更改 Prometheus 启动的配置文件即可。

整体配置文件如下:

# my global config
global:scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files:# - "first_rules.yml"# - "second_rules.yml"scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:5555']- job_name: 'exporter'static_configs:- targets: ['localhost:5557']

更改配置文件后,重启服务即可。重启后就可以在 Prometheus 界面查询 RocketMQ-Exporter 上报的指标,例如查询 rocketmq_broker_tps 指标,其结果如下:

8.png

5. 告警规则添加

在 Prometheus 可以展示 RocketMQ-Exporter 的指标后,就可以在 Prometheus 中配置 RocketMQ 的告警指标了。在 Prometheus 的配置文件中添加如下的告警配置项,*.rules 表示可以匹配多个后缀为 rules 的文件。

rule_files:# - "first_rules.yml"# - "second_rules.yml" - /home/prometheus/prometheus-2.7.0-rc.1.linux-amd64/rules/*.rules

当前设置的告警配置文件为 warn.rules,其文件具体内容如下所示。其中的阈值只起一个示例的作用,具体的阈值还需用户根据实际使用情况来自行设定。

###
# Sample prometheus rules/alerts for rocketmq.
#
###
# Galera Alertsgroups:
- name: GaleraAlertsrules:- alert: RocketMQClusterProduceHighexpr: sum(rocketmq_producer_tps) by (cluster) >= 10for: 3mlabels:severity: warningannotations:description: '{{$labels.cluster}} Sending tps too high.'summary: cluster send tps too high- alert: RocketMQClusterProduceLowexpr: sum(rocketmq_producer_tps) by (cluster) < 1for: 3mlabels:severity: warningannotations:description: '{{$labels.cluster}} Sending tps too low.'summary: cluster send tps too low- alert: RocketMQClusterConsumeHighexpr: sum(rocketmq_consumer_tps) by (cluster) >= 10for: 3mlabels:severity: warningannotations:description: '{{$labels.cluster}} consuming tps too high.'summary: cluster consume tps too high- alert: RocketMQClusterConsumeLowexpr: sum(rocketmq_consumer_tps) by (cluster) < 1for: 3mlabels:severity: warningannotations:description: '{{$labels.cluster}} consuming tps too low.'summary: cluster consume tps too low- alert: ConsumerFallingBehindexpr: (sum(rocketmq_producer_offset) by (topic) - on(topic)  group_right  sum(rocketmq_consumer_offset) by (group,topic)) - ignoring(group) group_left sum (avg_over_time(rocketmq_producer_tps[5m])) by (topic)*5*60 > 0for: 3mlabels:severity: warningannotations:description: 'consumer {{$labels.group}} on {{$labels.topic}} lag behindand is falling behind (behind value {{$value}}).'summary: consumer lag behind- alert: GroupGetLatencyByStoretimeexpr: rocketmq_group_get_latency_by_storetime > 1000for: 3mlabels:severity: warningannotations:description: 'consumer {{$labels.group}} on {{$labels.broker}}, {{$labels.topic}} consume time lag behind message store timeand (behind value is {{$value}}).'summary: message consumes time lag behind message store time too much 

最终,可以在 Prometheus 的看一下告警展示效果,红色表示当前处于告警状态的项,绿色表示正常状态。

9.png

6. Grafana dashboard for RocketMQ

Prometheus 自身的指标展示平台没有当前流行的展示平台 Grafana 好, 为了更好的展示 RocketMQ 的指标,可以使用 Grafana 来展示 Prometheus 获取的指标。

首先到官网去下载:https://grafana.com/grafana/download,这里仍以二进制文件安装为例进行介绍。

wget https://dl.grafana.com/oss/release/grafana-6.2.5.linux-amd64.tar.gz 
tar -zxvf grafana-6.2.5.linux-amd64.tar.gz
cd grafana-5.4.3/

同样为了不与其它进程的使用端口冲突,可以修改 conf 目录下的 defaults.ini 文件的监听端口,当前将 grafana 的监听端口改为 55555,然后使用如下的命令启动即可:

./bin/grafana-server web

然后通过浏览器访问 http://&lt;服务器 IP 地址>:55555,就可以验证 grafana 是否已成功安装。系统默认用户名和密码为 admin/admin,第一次登陆系统会要求修改密码,修改密码后登陆,界面显示如下:

10.png

点击 Add data source 按钮,会要求选择数据源。

11.png

选择数据源为 Prometheus,设置数据源的地址为前面步骤启动的 Prometheus 的地址。

12.png

回到主界面会要求创建新的 Dashboard。

13.png

点击创建 dashboard,创建 dashboard 可以自己手动创建,也可以以配置文件导入的方式创建,当前已将 RocketMQ 的 dashboard 配置文件上传到 Grafana 的官网,这里以配置文件导入的方式进行创建。

14.png

点击 New dashboard 下拉按钮。

15.png

选择 import dashboard。

16.png

这个时候可以到 Grafana 官网去下载当前已为 RocketMQ 创建好的配置文件,地址为:https://grafana.com/dashboards/10477/revisions,如下图所示:

17.png

点击 download 就可以下载配置文件,下载配置文件然后,复制配置文件中的内容粘贴到上图的粘贴内容处。

最后按上述方式就将配置文件导入到 Grafana 了。

18.png

最终的效果如下所示:

19.png

作者简介

陈厚道,曾就职于腾讯、盛大、斗鱼等互联网公司。目前就职于尚德机构,在尚德机构负责基础架构方面的设计和开发工作。对分布式消息队列、微服务架构和落地、DevOps 和监控平台有比较深入的研究。

冯庆,曾就职于华为。目前就职于尚德机构,在尚德机构基础架构团队负责基础组件的开发工作。

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言结构体函数平面向量加法公式,插值 拟合 符号变量与符号表达式 微积分 解方程 向量运算...

7.1.1 分段线性插值所谓分段线性插值就是通过插值点用折线段连接起来逼近原曲线&#xff0c;这也是计算机绘制图形的基本原理。实现分段线性插值不需编制函数程序&#xff0c;MATLAB自身提供了内部函数interp1其主要用法如下&#xff1a;interp1(x,y,xi) 一维插值◆ yiinterp1(…

Redis 很屌,不懂使用规范就糟蹋了

作者 | 码哥 来源 | 码哥字节❝这可能是最中肯的 Redis 使用规范了一网友昨天和我说&#xff0c;公司凌晨 12 点之后&#xff0c;网站用户量暴增&#xff0c;出现了一个技术故障&#xff0c;用户无法下单&#xff0c;当时老大火冒三丈&#xff01;经过查找发现 Redis 报 C…

python统计字符在文件中出现的次数_一文搞定统计字符串中某字符出现的频次

下面是统计字符串中某字符出现的次数的方法 方法1&#xff1a; 这个方法相当简单&#xff0c;零基础自学编程&#xff0c;代码写成这样能满足需求&#xff0c;但它逐个逐个计数&#xff0c;比较笨拙。rlt {} for i in content: if i in rlt.keys(): rlt[i] 1 else: rlt[i] 1…

深度 | 数据仓库分层存储技术揭秘

简介&#xff1a; 作者&#xff1a; 沄浩、士远 一 、背景 据IDC发布的《数据时代2025》报告显示&#xff0c;全球每年产生的数据将从2018年的33ZB增长到2025年的175ZB&#xff0c;平均每天约产生491EB数据。随着数据量的不断增长&#xff0c;数据存储成本成为企业IT预算的重…

android tab 切换动画,Android之ViewPager+TabLayout组合实现导航条切换效果(微信和QQ底部多标签切换)...

前言之前在另外一篇中用Fragment和button实现了点击切换Fragment的效果&#xff0c;比较简陋。这次改用ViewPagerTabLayout 实现联动的效果。实现效果ViewPager 多个页面滑动TabLayout 和 ViewPager绑定&#xff0c;实现Fragment和标签绑定TabLayout的自定义标签以及选中颜色改…

5G 和云原生时代的技术下半场,视频化是最大最新的确定性

简介&#xff1a; 随着 5G/ 芯片 / 区块链等等新技术的不断成熟、云计算的普及和云原生时代带来的诸多便捷&#xff0c;开发者和架构师们眼前的挑战也不再只是 0-1 的建设问题&#xff0c;技术如何更多地带来业务价值成为了一个值得讨论的话题。阿里巴巴集团研究员&#xff0c;…

linux unzip命令不存在_15个常用基础命令Linux(很多人不知道!)

Linux 是码农最常用的的OS&#xff0c;很多操作都是命令行&#xff0c;所以很有必要熟练和理解其中一些重要的命令。这里会介绍一些。这里讲的所有都基于bash,mac也可以使用。!!这件事发生了几次&#xff1f; 输入并运行一条长命令后&#xff0c;您发现您忘记在开头添加sudo。 …

云安全的新战场上,要靠什么来抵御威胁

当谈及安全产业&#xff0c;你脑海里能够想到哪些事情&#xff1f;是红黑大战的攻防演练&#xff0c;还是PC上的各种安全软件&#xff1f;事实上&#xff0c;安全的范围远超我们的想象&#xff0c;安全产业也一直在背后&#xff0c;默默的保护在互联网生活的周围。 互联网的发…

函数计算助力高德地图平稳支撑亿级流量高峰

简介&#xff1a; 2020 年的“十一出行节”期间&#xff0c;高德地图创造了记录 ——截止 2020 年 10 月 1 日 13 时 27 分 27 秒&#xff0c;高德地图当日活跃用户突破 1 亿&#xff0c;比 2019 年 10 月 1 日提前 3 时 41 分达成此记录。 期间&#xff0c;Serverless 作为其中…

阿里云李克:阿里云边缘云计算的技术和实践

简介&#xff1a; 李克&#xff1a;边缘计算的核心目标是推动人、事、物的快速决策。 在4月7日下午举办的边缘计算论坛上&#xff0c;阿里云资深技术专家李克为我们带来了《阿里云边缘云计算的技术和实践》为题的精彩演讲。 备受关注的2021全球分布式云大会北京站于4月7日隆重…

数学在左,人生在右

在人们印象中&#xff0c;数学作为一门基础学科&#xff0c;由简单的数字和符号组成或简单或复杂的算式&#xff0c;融入我们的生活、学习、工作的方方面面&#xff0c;是理性、严谨的。 然而笔者在 2021 阿里巴巴全球数学竞赛颁奖典礼上看到数学的另一面&#xff1a;在数学的…

函数计算助力语雀构建稳定且安全的业务架构

简介&#xff1a; 语雀是一个专业的云端知识库&#xff0c;用于团队的文档协作。现在已是阿里员工进行文档编写和知识沉淀的标配&#xff0c;并于 2018 年开始对外提供服务。 客户介绍 语雀是一个专业的云端知识库&#xff0c;用于团队的文档协作。现在已是阿里员工进行文档编…

android menu自定义,Android提高之自定义Menu(TabMenu)实现方法

一般使用过UCWEB-Android版的人都应该对其特殊的menu有一定的印象&#xff0c;把menu做成Tab-Menu(支持分页的Menu)&#xff0c;可以容纳比Android传统的menu更丰富的内容(Android的menu超过6项则缩略在[更多]里)&#xff0c;本文参考网上的例子的基础上对例子进行简化以及封装…

一行指令造成 60 亿美元蒸发,更让 Facebook 遭遇史诗级故障!

作者 | 马超 责编 | 张红月出品 | CSDN弱小从来不是生存的障碍&#xff0c;傲慢才是。10月4日 FaceBook 发生了一次史诗级中断事故&#xff0c;故障期间 FaceBook 所有旗下APP全面对外服务中断&#xff0c;而且故障的时间长达7个小时之久。根据 Facebook 最新的声明来看&…

一不小心,它成为了 GitHub Alibaba Group 下 Star 最多的开源项目

简介&#xff1a; 随着微服务的流行&#xff0c;应用更加轻量和高效&#xff0c;但是带来的困境是线上问题排查越来越复杂困难。传统的 Java 排查问题&#xff0c;需要重启应用再进行调试&#xff0c;但是重启应用之后现场会丢失&#xff0c;问题难以复现。 来源 | 阿里巴巴云…

因云而生 全新视角看阿里云服务器硬件方升架构

简介&#xff1a; 方升架构作为新一代云服务器架构的典范&#xff0c;是阿里云云原生基础设施的最佳实践之一。阿里云结合云计算丰富业务场景需求&#xff0c;推出一系列自研服务器产品、部件及解决方案&#xff0c;包括高性能计算全栈解决方案、高性能存储和大容量存储解决方案…

华为鸿蒙电脑操作系统测试版,华为鸿蒙测试版下载 华为鸿蒙测试版电脑版下载...

软件介绍《华为鸿蒙测试版电脑版》是华为的鸿蒙os系统&#xff0c;能兼容全部安卓应用的所有Web应用。若安卓应用重新编译&#xff0c;在华为OS操作系统上&#xff0c;华为OS将打通手机、电脑、平板、电视、汽车、智能穿戴。游戏启动1、关于安卓模拟器&#xff0c;在下载的游戏…

项目版本管理的最佳实践:云效飞流Flow篇

简介&#xff1a; 飞流Flow的最佳实践&#xff08;使用阿里云云效&#xff09;为了更好地使用飞流Flow&#xff0c;接下来将结合阿里云云效来讲解飞流Flow的最佳实践 目录 一、分支规约 二、版本号规约 2.1 主版本号&#xff08;首位版本号&#xff09; 2.2 次版本号&#xff…

低碳数据中心,因何而来?一文读懂如何利用超融合降碳

作者 | 让科技向善的 来源 | SmartX“Global warming isn’t a prediction. It is happening.” 全球变暖并非预言&#xff0c;是正在发生的现实。联合国政府间气候变化专门委员会在今年 8 月发布的报告宣称&#xff0c;人类即将突破 1.5 摄氏度这一关键的气温上升极限。为…

Duang,您的钉钉应用已上线!云开发5分钟快速打造钉钉会议室预定系统

简介&#xff1a; 5分钟可以干什么&#xff1f;喝一杯咖啡&#xff0c;回一封邮件&#xff0c;还是开发上线一个钉钉应用。云开发平台联合钉钉开发平台推出0门槛打造你的第一个钉钉应用的活动&#xff0c;完成相应任务后&#xff0c;即可领取精美奖品。春暖花开&#xff0c;领个…