天天看點

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

作者 | 陳厚道  馮慶

來源 |

阿裡巴巴雲原生公衆号
導讀:本文将對 RocketMQ-Exporter 的設計實作做一個簡單的介紹,讀者可通過本文了解到 RocketMQ-Exporter 的實作過程,以及通過 RocketMQ-Exporter 來搭建自己的 RocketMQ 監控系統。RocketMQ 線上可互動教程現已登入知行動手實驗室,PC 端登入 start.aliyun.com 即可直達。

RocketMQ 雲原生系列文章:

RocketMQ-Exporter 項目的 GitHub 位址:

https://github.com/apache/rocketmq-exporter

文章主要内容包含以下幾個方面:

  1. RocketMQ 介紹
  2. Prometheus 簡介
  3. RocketMQ-Exporter 的具體實作
  4. RocketMQ-Exporter 的監控名額和告警名額
  5. RocketMQ-Exporter 使用示例

RocketMQ 是一個分布式消息和流資料平台,具有低延遲、高性能、高可靠性、萬億級容量和靈活的可擴充性。簡單的來說,它由 Broker 伺服器和用戶端兩部分組成,其中用戶端一個是消息釋出者用戶端(Producer),它負責向 Broker 伺服器發送消息;另外一個是消息的消費者用戶端(Consumer),多個消費者可以組成一個消費組,來訂閱和拉取消費 Broker 伺服器上存儲的消息。

正由于它具有高性能、高可靠性和高實時性的特點,與其他協定元件在 MQTT 等各種消息場景中的結合也越來越多,應用越來越廣泛。而對于這樣一個強大的消息中間件平台,在實際使用的時候還缺少一個監控管理平台。

目前在開源界,使用最廣泛監控解決方案的就是 Prometheus。與其它傳統監控系統相比較,Prometheus 具有易于管理,監控服務的内部運作狀态,強大的資料模型,強大的查詢語言 PromQL,高效的資料處理,可擴充,易于內建,可視化,開放性等優點。并且借助于 Prometheus 可以很快速的建構出一個能夠監控 RocketMQ 的監控平台。

下圖展示了 Prometheus 的基本架構:

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

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 官方收錄,其位址為:

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

目前在 Exporter 當中,實作原理如下圖所示:

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-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 主要是配合 Prometheus 來做監控,下面來看看目前在 Expoter 中定義了哪些監控名額和告警名額。

  • 監控名額
基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

rocketmq_message_accumulation 是一個聚合名額,需要根據其它上報名額聚合生成。

  • 告警名額
基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

消費者堆積告警名額也是一個聚合名額,它根據消費堆積的聚合名額生成,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 這一條語句不僅可以實作為任意一個消費者建立消費告警堆積告警,而且還可以使消費堆積的門檻值取一個跟生産者發送速度相關的門檻值。這樣大大增加了消費堆積告警的準确性。

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 有如下的運作選項:

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額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://&lt

;伺服器 IP 位址>:5555,就可以驗證 Prometheus 是否已成功安裝,顯示界面如下:

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

由于 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 名額,其結果如下:

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

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 的看一下告警展示效果,紅色表示目前處于告警狀态的項,綠色表示正常狀态。

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

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           

然後通過浏覽器通路

;伺服器 IP 位址>:55555,就可以驗證 grafana 是否已成功安裝。系統預設使用者名和密碼為 admin/admin,第一次登陸系統會要求修改密碼,修改密碼後登陸,界面顯示如下:

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

點選 Add data source 按鈕,會要求選擇資料源。

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

選擇資料源為 Prometheus,設定資料源的位址為前面步驟啟動的 Prometheus 的位址。

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

回到主界面會要求建立新的 Dashboard。

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

點選建立 dashboard,建立 dashboard 可以自己手動建立,也可以以配置檔案導入的方式建立,目前已将 RocketMQ 的 dashboard 配置檔案上傳到 Grafana 的官網,這裡以配置檔案導入的方式進行建立。

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

點選 New dashboard 下拉按鈕。

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

選擇 import dashboard。

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

這個時候可以到 Grafana 官網去下載下傳目前已為 RocketMQ 建立好的配置檔案,位址為:

https://grafana.com/dashboards/10477/revisions

,如下圖所示:

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

點選 download 就可以下載下傳配置檔案,下載下傳配置檔案然後,複制配置檔案中的内容粘貼到上圖的粘貼内容處。

最後按上述方式就将配置檔案導入到 Grafana 了。

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

最終的效果如下所示:

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

作者簡介

陳厚道,曾就職于騰訊、盛大、鬥魚等網際網路公司。目前就職于尚德機構,在尚德機構負責基礎架構方面的設計和開發工作。對分布式消息隊列、微服務架構和落地、DevOps 和監控平台有比較深入的研究。

馮慶,曾就職于華為。目前就職于尚德機構,在尚德機構基礎架構團隊負責基礎元件的開發工作。

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台RocketMQ 介紹Prometheus 簡介RocketMQ-Exporter 的具體實作RocketMQ-Exporter 的監控名額和告警名額RocketMQ-Exporter 使用示例

在 PC 端登入

start.aliyun.com

知行動手實驗室,沉浸式體驗線上互動教程。