Prometheus Operator实战—— Prometheus、Alertmanager、Grafana 监控RockectMq

news2025/1/16 1:52:27

1. RocketMQ 介绍

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

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

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

2. Prometheus、Alertmanager、Grafana环境搭建

安装方式参考 Prometheus Operator 极简配置方式在k8s一条龙安装Prometheus 监控这里就不细说了。

3. 在 K8s上部署RocketMQ Exporter

RocketMQ 本身不支持 Prometheus 需要使用 rocketmq-exporter

3.1 Apache RocketMQ Exporter for Prometheus.

项目地址 https://github.com/apache/rocketmq-exporter

制作我们自己的docker镜像

  1. git clone https://github.com/apache/rocketmq-exporter.git

  2. cd xx/rocketmq-exporter

  3. build mvn clean package docker:build

  4. 修改tag,并push

    docker tag rocketmq-exporter admin4j/rocketmq-exporter
    docker push admin4j/rocketmq-exporter
    

不想自己弄镜像的直接使用我做好的即可docker pull admin4j/rocketmq-exporter:latest

3.2 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 端点进行暴露。

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

3.4 RocketMQ-Exporter 使用示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rocketmq-exporter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rocketmq-exporter
  template:
    metadata:
      labels:
        app: rocketmq-exporter
    annotations:
      prometheus.io/path: metrics
      prometheus.io/port: '5557'
      prometheus.io/scrape: 'true'
    spec:
      containers:
        - name: rocketmq-exporter
          image: admin4j/rocketmq-exporter
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              memory: 1G
          env:
            - name: rocketmq.config.namesrvAddr
              value: 192.168.0.192:9876

这里使用注解 prometheus.io/scrape: 'true'的方式让prometheus自定方式rocketmq-exporter的pod

使用注解prometheus.io/scrape: 'true' 需要提前配置,参考 【k8s 实战】Prometheus Operator 高级配置- 监控Kubernetes自动发现

3.5 查看 prometheus targets 自动发现rocketmq-exporter

在这里插入图片描述

3. 使用 Grafana Dashboard 展示监控项数据

在Grafana 官网找一个 mysql 监控模板 https://grafana.com/grafana/dashboards/?search=RocketMQ

在这里插入图片描述

我们这里选择 ID: 14612,查看效果

4. 利用AlertManager 发送RockectMq报警消息

4.1 告警规则添加

添加PrometheusRule CRD

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    prometheus: k8s
    role: alert-rules
  name: prometheus-rocketmq-rules
spec:
  groups:
  - name: RocketmqAlerts
    rules:
    - alert: RocketMQClusterProduceHigh
      expr: sum(rocketmq_producer_tps) by (cluster) >= 10
      for: 3m
      labels:
        severity: warning
      annotations:
        description: '{{$labels.cluster}} Sending tps too high.'
        summary: cluster send tps too high
    - alert: RocketMQClusterProduceLow
      expr: sum(rocketmq_producer_tps) by (cluster) < 1
      for: 3m
      labels:
        severity: warning
      annotations:
        description: '{{$labels.cluster}} Sending tps too low.'
        summary: cluster send tps too low
    - alert: RocketMQClusterConsumeHigh
      expr: sum(rocketmq_consumer_tps) by (cluster) >= 10
      for: 3m
      labels:
        severity: warning
      annotations:
        description: '{{$labels.cluster}} consuming tps too high.'
        summary: cluster consume tps too high
    - alert: RocketMQClusterConsumeLow
      expr: sum(rocketmq_consumer_tps) by (cluster) < 1
      for: 3m
      labels:
        severity: warning
      annotations:
        description: '{{$labels.cluster}} consuming tps too low.'
        summary: cluster consume tps too low
    - alert: ConsumerFallingBehind
      expr: (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
      for: 3m
      labels:
        severity: warning
      annotations:
        description: 'consumer {{$labels.group}} on {{$labels.topic}} lag behind
          and is falling behind (behind value {{$value}}).'
        summary: consumer lag behind
    - alert: GroupGetLatencyByStoretime
      expr: rocketmq_group_get_latency_by_storetime > 1000
      for: 3m
      labels:
        severity: warning
      annotations:
        description: 'consumer {{$labels.group}} on {{$labels.broker}}, {{$labels.topic}} consume time lag behind message store time
          and (behind value is {{$value}}).'
        summary: message consumes time lag behind message store time too much

RocketmqAlerts

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

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

相关文章

硬盘恢复工具软件哪个好?分享这些硬盘数据恢复工具软件

您刚刚删除了一些非常重要的文件&#xff01; 不要惊慌……您仍然有很大的机会可以以很少甚至免费的方式取回它们。 我们正在深入研究当今最好的硬盘恢复软件。 我们认为有一个明显的赢家&#xff0c;但我们提供了一些其他选项&#xff0c;以防您需要更高级的功能或使用不同…

四、网络层(三)IPv4

目录 3.1 IPv4地址 3.1.1分类编址 3.1.2子网划分与子网掩码 3.1.3无分类编址CIDR 3.1.4网络地址转换&#xff08;NAT&#xff09; 3.2 IPv4分组 3.2.1 IP分组&#xff08;IP数据报&#xff09;的格式 3.2.2 IP数据报分片 3.3 地址解析协议&#xff08;ARP&am…

计讯物联二次供水水池泵站监测方案,从根本上保障居民饮用水安全

水质污染、设施故障率高、供水压力、安防缺失、故障反馈周期长等城市高楼大厦高层供水问题层出不穷&#xff0c;给二次供水安全带来隐患和威胁。为确保高层住宅安全稳定地进行二次供水&#xff0c;计讯物联利用新一代物联网技术、信息技术、云计算、大数据、数字孪生技术等先进…

ESP32中micro-ROS与ROS2通信(点亮esp32指示灯)

前言 micro-ROS&#xff0c;是基于ROS2进行优化的一套轻量级ROS系统&#xff0c;它提供了完全部署的ROS 2生态系统的大多数吸引人的工具和功能&#xff0c;并具有入式和低资源设备的卓越能力&#xff0c;可以运行在MCU硬件平台。 传统上&#xff0c;即使机器人包含许多ROS&am…

视频号直播间首次突破1万人

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 12月21直播结束后&#xff0c;看了下直播数据&#xff0c;竟然有100多人在线时长达到了1小时以上。看来直播间用户的粘性越来越强了&#xff0c;固定用户越来越多。个人做直播已经2年了&#xff0c…

聚观早报 | 马斯克或将卸任推特CEO;小米内部人士回应年底裁员

今日要闻&#xff1a;马斯克或将卸任推特CEO&#xff1b;小米内部人士回应年底裁员&#xff1b;微软或将于明年收购Netflix&#xff1b;奥迪正逐步淘汰燃油车&#xff1b;支付宝开通健康防疫专区马斯克或将卸任推特CEO 自今年 10 月份入主推特以来&#xff0c;马斯克一系列大刀…

[洛谷]【深基16.例3】二叉树深度

一、题目描述 题目描述 有一个 n(n≤106)n(n \le 10^6)n(n≤106) 个结点的二叉树。给出每个结点的两个子结点编号&#xff08;均不超过 nnn&#xff09;&#xff0c;建立一棵二叉树&#xff08;根节点的编号为 111&#xff09;&#xff0c;如果是叶子结点&#xff0c;则输入 …

实测 | 海纳百川,华为OceanStor Pacific分布式存储为多元算力应用带来更优选择...

被称为开眼看世界的林则徐&#xff0c;在自己的书房中写了这样一副对联&#xff0c;以做自勉&#xff1a;海纳百川&#xff0c;有容乃大&#xff0c;壁立千仞&#xff0c;无欲则刚。包容的胸怀是我们做成很多事情的根基&#xff0c;也是一项产业战略、科技事业发展的关键。近几…

数据开源 | Magic Data开源基于ChatGPT的可扩展的对话数据集

在过去的一月里&#xff0c;人工智能领域中最火的话题莫过"ChatGPT"。ChatGPT是OpenAI于11月30日发布最新作品聊天机器人&#xff0c;开放公众免费测试。聊天机器人是一种软件应用程序&#xff0c;根据用户的提问做出回应、模仿人类的对话方式。目前&#xff0c;Chat…

做好程序中的axios错误提示

今天外包组的项目客户反馈老是出错&#xff0c;一看页面卡在加载数据过程中&#xff0c;前后台分离之后&#xff0c;页面变得很奇怪&#xff0c;脸面都出来了&#xff0c;就是没有具体值。 初级程序员在很长一段时间要经历一个升级过程&#xff0c;写的程序首先是写画面&#…

散户如何进行开展量化股票交易的?

散户如何进行开展量化股票交易的&#xff1f;也就是投资者交易的条件&#xff0c;达到了投资者设定的条件时候&#xff0c;系统接口就会自动交易&#xff0c;下面来看看具体的流程&#xff1a; 依据个股的历史记录&#xff0c;进行多因子选股&#xff0c;比如&#xff0c;把市…

Rasa 基于知识库的问答 音乐百科机器人

文章目录1. 使用 ActionQueryKnowledgeBase创建知识库NLU数据2. 音乐机器人nlu.ymlstories.ymlrules.ymldomain.ymlconfig.ymlendpoints.ymldata.json自定义动作 actions.py测试使用Neo4jlearn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code 机器人返回了…

从“小螺栓血案”谈装配体模型连接螺栓6个正确的处理方法

经调查发现&#xff1a;“江苏启安建设工程有限公司提供了支吊架膨胀螺栓计算书&#xff0c;但计算书上无企业相关人员签字&#xff0c;未经监理单位审核同意&#xff0c;未报施工总包单位&#xff0c;未经设计单位审定&#xff1b;计算书认为支吊架应采用直径为12mm 的膨胀螺栓…

成为全栈程序员太难了?这个低代码高效率的报表工具绝对不能错过

现在程序员有个很奇怪的归宿&#xff0c;就是都在主动或被动地成为全栈程序员。前端被要求写后端的代码&#xff0c;后端被要求能看懂前端&#xff0c;美名其曰加速成长或为老板省钱&#xff01; 但一个人能做到全栈真的很难&#xff01;就拿报表开发而言&#xff0c;学习整个…

朴素贝叶斯

概要 前文介绍了贝叶斯公式基础以及在统计领域的基本应用贝叶斯基础_zhanglehes的博客-CSDN博客&#xff0c;本文将介绍它的一种新的转换形式&#xff0c;以及在机器分类领域的应用。 分类的数学描述 朴素贝叶斯公式推理 贝叶斯公式 在分类领域&#xff0c;将其改写如下 我们…

在conda虚拟环境中安装OpenCv并在pycharm中使用

目录 一. 在下面的网站中下载OpenCV文件 二. 在虚拟环境中使用pip安装该文件 三、官网下载OpenCV源代码&#xff08;后续使用&#xff09; 四、pycharm中打开该虚拟环境 五、安装numpy和matplotlib 六、pycharm找不到cv2模块解决&#xff1a; 七、在pyhcharm中使用cv不自…

在服务器安装jupyter并在本地访问

一、安装 1.1安装jupyter notebook pip install jupyter1.2安装jupyter lab pip install jupyterlab # 中文界面包 pip install jupyterlab-language-pack-zh-CN二、本地使用 我们在远程登录Linux服务器时&#xff0c;经常希望在本地浏览器端打开jupyter notebook&#xff…

需求的收集,筛选和排序

对需求的把握是否准确&#xff0c;很大程度上决定了产品的成与败&#xff0c;需求分析对于产品经理是必须要掌握的技能&#xff0c;接下来聊下需求收集的目标和方式。 一、收集渠道&#xff1a; 1、用户反馈&#xff1a; 用户提出的反馈有可能也是我们没有意识到的问题&#…

SMT工厂及PCB工程师的福音!可视化BOM交互焊接工具来了

目前电子产品已经渗透到我们生活的各个角落&#xff0c;其产品涵盖通信、医疗、计算机及周边视听产品、玩具、家用电器、军工用品等。关于电子产品的PCBA焊接&#xff0c;在试样阶段一般采用手工焊接。手工焊接的好处是成本低&#xff0c;一把电络铁就搞定了&#xff0c;如果样…

记一次简单的白加黑测试

前一阵子成了小洋人&#xff0c;所以很长的时间也没更新了&#xff0c;今天更一篇PHP代码审计的吧&#xff0c;此次分享的内容十分的简单&#xff0c;大家简单的看看即可 命令注入 -1 从上述代码&#xff0c;我们可以看出来&#xff0c;$ip变量接收过来之后通过合并运算符(??…