关于云原生:基于-RocketMQ-Prometheus-Exporter-打造定制化-DevOps-平台

122次阅读

共计 7557 个字符,预计需要花费 19 分钟才能阅读完成。

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

导读:本文将对 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. 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

RocketMQ-Exporter 的具体实现

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

整个零碎基于 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 中定义了哪些监控指标和告警指标。

  • 监控指标

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

  • 告警指标

消费者沉积告警指标也是一个聚合指标,它依据生产沉积的聚合指标生成,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 有如下的运行选项:

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

编译进去的 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 是否已胜利装置,显示界面如下:

因为 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 指标,其后果如下:

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 Alerts

groups:
- name: GaleraAlerts
  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 

最终,能够在 Prometheus 的看一下告警展现成果,红色示意以后处于告警状态的项,绿色示意失常状态。

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://< 服务器 IP 地址 >:55555, 就能够验证 grafana 是否已胜利装置。零碎默认用户名和明码为 admin/admin,第一次登陆零碎会要求批改明码,批改明码后登陆,界面显示如下:

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

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

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

点击创立 dashboard,创立 dashboard 能够本人手动创立,也能够以配置文件导入的形式创立,以后已将 RocketMQ 的 dashboard 配置文件上传到 Grafana 的官网,这里以配置文件导入的形式进行创立。

点击 New dashboard 下拉按钮。

抉择 import dashboard。

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

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

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

最终的成果如下所示:

作者简介

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

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

在 PC 端登录 start.aliyun.com 知口头手实验室,沉迷式体验在线交互教程

正文完
 0