EMQX+Prometheus+Grafana:MQTT 資料視覺化監控實踐

EMQX發表於2022-12-12

前言

作為一款全球下載量超千萬的大規模分散式物聯網 MQTT 伺服器,最新發布的 EMQX 5.0 不僅全球首個達成單叢集 1 億 MQTT 連線支援,也是首個將 QUIC 引入 MQTT 的開創性產品。如今,EMQX 在各個行業為高可靠、高效能的物聯網實時資料移動、處理和整合提供著動力,助力企業構建關鍵業務的 IoT 應用。

在使用 EMQX 的過程中,不管是使用者、運維人員還是開發者,都需要對其執行狀態及產生的指標資料進行監控與觀察,以便及時發現問題並處理。除使用內建的 Dashboard 以外,我們還可以透過 EMQX 提供的 API 來將監控資料整合到第三方監控平臺中,對包括叢集節點狀態、連線、訂閱主題數、訊息吞吐量等 EMQX 執行狀態相關指標進行監控。

使用第三方監控系統對 EMQX 進行監控有如下好處:

  • 可以將 EMQX 的監控資料與其他系統的監控資料進行整合,形成一個完整的監控系統,如監控伺服器主機的相關資訊;
  • 可以使用更加豐富的監控圖表,更直觀地展示監控資料,如使用 Grafana 的儀表盤;
  • 可以使用更加豐富的告警方式,更及時地發現問題,如使用 Prometheus 的 Alertmanager。

本文將以 Prometheus 和 Grafana 為例,介紹如何將 EMQX 5.0 的監控資料整合到 Prometheus 中,使用 Grafana 來展示 EMQX 的監控資料,並最終搭建出一個簡單的 EMQX 監控系統。

Prometheus 是由 SoundCloud 開源的監控告警解決方案,支援多維資料模型、靈活的查詢語言、強大的告警管理等特性。

Grafana 是一款開源的資料視覺化工具,支援多種資料來源,包括 Prometheus。

準備工作

在開始之前,我們需要先準備好以下執行環境,安裝並執行所需要的軟體工具。本文示例將使用 Docker 來安裝和啟動,讀者也可根據文章中提供的官方下載地址,自行下載安裝包進行安裝。

安裝 EMQX 5.0

使用 Docker 快速安裝和啟動 EMQX 5.0:

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:latest

除 Docker 安裝外,EMQX 還支援使用 RPM 或 DEB 包安裝。

安裝完成後,我們可以開啟 http://localhost:18083 來訪問 EMQX 的 Dashboard,檢視 EMQX 的執行狀態。如果能夠正常訪問到 EMQX 的 Dashboard,此時說明 EMQX 已經安裝成功。

1

安裝 Prometheus

同樣,示例中我們將使用 Docker 的方式來快速安裝和使用 Prometheus,因為此時我們還沒有開始配置 Prometheus,所以可以先下載一份 Prometheus 官方提供的 Docker 映象。

docker pull prom/prometheus

在安裝完成後,需要配置一份 Prometheus 的配置檔案,用於指定 Prometheus 的資料來源,以及告警規則等資訊。因此可先將 Prometheus 的配置檔案配置好,在啟動時將配置檔案掛載到容器中執行即可。具體配置步驟請見後文。

除使用 Docker 外,也可以參考 Prometheus 官方文件,下載和使用二進位制包來安裝和執行 Prometheus。

安裝 Grafana

使用 Docker 快速安裝和啟動 Grafana:

docker run -d --name grafana -p 3000:3000 grafana/grafana-oss

讀者也可以參考 Grafana 官方文件,下載和使用二進位制包來安裝和執行 Grafana。

當 Grafana 啟動完成後,我們可以開啟 http://localhost:3000 來訪問 Grafana,如果能夠正常訪問到 Grafana 的登入頁面,此時說明 Grafana 已經安裝成功。

2

安裝 Node Exporter

這是一個可選的步驟

如果想要監控部署 EMQX 的主機資訊,可以使用 Node Exporter 來獲取主機的資訊。Node Exporter 用於收集伺服器的監控資料,例如 CPU、記憶體、磁碟、網路等資訊。

注意:Node Exporter 僅支援獲取 Linux 系統的監控資料

本文不建議使用 Docker 來安裝 Node Exporter。安裝完成後,我們可以透過 http://localhost:9100/metrics 來訪問 Node Exporter 的監控資料。如果可以訪問到系統主機的監控資料,說明 Node Exporter 已經安裝成功。

3

配置 Prometheus

完成上述的準備工作後,我們需要配置 Prometheus,使 Prometheus 可以正常採集到 EMQX 的監控資料。

配置 Prometheus 資料採集

Prometheus 透過配置檔案來指定資料採集的目標,配置檔案預設路徑為 /etc/prometheus/prometheus.yml,可以透過 --config.file 引數指定配置檔案路徑。

EMQX 5.0 提供了一個獲取 Prometheus 格式監控資料的 HTTP API -- /api/v5/prometheus/stats,使用該 API 時無需認證資訊,我們只需要將其配置到 Prometheus 的配置檔案中的 metrics_path 中即可。

對於使用 Node Exporter 來獲取主機監控資料的使用者,還需要將 Node Exporter 服務的地址配置到 Prometheus 的配置檔案的 static_configs 中。

在 Prometheus 配置檔案中,透過 scrape_configs 指定資料採集的目標,以下為完整的 Prometheus 配置檔案內容示例:

注意:在使用配置檔案時,需要將各服務對應的 targets 中的 IP 地址替換為您所部署服務的真實 IP 地址。如您使用的是本地部署,則可忽略該提醒。
# prometheus.yaml
global:
  scrape_interval:     10s # The default scrape interval is every 10 seconds.
  evaluation_interval: 10s # The default evaluation interval is every 10 seconds.
  # On this machine, every time series will be exported by default.
  external_labels:
    monitor: 'emqx-monitor'
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first.rules"
  # - "second.rules"
  - "/etc/prometheus/rules/*.rules"
# Data pull configuration
scrape_configs:
  # EMQX monitoring
  - job_name: 'emqx'
    metrics_path: /api/v5/prometheus/stats
    scrape_interval: 5s
    honor_labels: true
    static_configs:
      # EMQX IP address and port
      - targets: [127.0.0.1:18083]
  - job_name: 'node-exporter'
    scrape_interval: 5s
    static_configs:
      # node-exporter IP address and port
      - targets: ['127.0.0.1:9100']
        labels:
          instance: dashboard-local

在上述配置中,job_name 為資料採集的任務名稱,static_configs 為資料採集的目標,targets 為資料採集的目標地址,127.0.0.1:18083 為 EMQ X 5.0 的 API 服務的地址埠。

最後再將上述的配置檔案內容儲存為 prometheus.yaml,並將其複製到 /etc/prometheus/ 目錄下,或儲存到您的需要儲存該檔案的自定義路徑下。至此我們就完成了 Prometheus 的簡單配置。

啟動 Prometheus

在完成了 Prometheus 的配置後,我們就可以透過使用配置檔案來啟動 Prometheus 服務了。如果您是使用 Docker 安裝的 Prometheus,可以透過以下命令啟動 Prometheus:

docker run -d --name prometheus -p 9090:9090 -v /path/to/your/prometheus.yaml:/etc/prometheus.yaml prom/prometheus --config.file=/etc/prometheus/prometheus.yaml

如果是透過其它方式下載和安裝的,可以在執行 Prometheus 時指定配置檔案路徑,例如:

./prometheus --config.file=prometheus.yml
注意:在使用配置檔案時,需要將 /path/to/your/prometheus.yaml 替換為您儲存 Prometheus 配置檔案的真實路徑。

執行成功後,開啟 http://localhost:9090 就可以訪問 Prometheus 的 Dashboard 了。透過 Dashboard 可以檢視 Prometheus 的執行狀態,輸入 emqx 可以查詢 EMQX 的監控資料,如果資料顯示正常,就表示此時 Prometheus 已經成功啟動,併成功採集到 EMQX 的監控資料。

4

關於使用 Pushgateway

除直接透過使用包含 EMQX 的 API 配置檔案的方式來指定採集資料指標外,EMQX 同樣支援使用 Pushgateway 來採集資料指標。

Pushgateway 為 Prometheus 的一個元件,用於臨時儲存資料指標,然後由 Prometheus 從 Pushgateway 中拉取資料指標。

通常情況下,我們不需要使用 Pushgateway 服務,因為 EMQX 本身就支援透過 API 來獲取資料指標。如果盲目使用 Pushgateway 去獲取資料,可能會出現一些問題,例如:Pushgateway 監視多個例項時,Pushgateway 會成為單個故障點,Pushgateway 不會丟棄或者刪除其 Series 並且會一直暴露給 Prometheus,等等。

但是在某些情況下,我們可能需要使用 Pushgateway 來採集資料指標,例如:當 EMQX 服務執行在 Docker 容器或 Kubernetes 叢集中時,我們可以透過使用 Pushgateway 來採集資料指標,而不需要將 EMQX 的 API 暴露到外部網路中。且通常,Pushgateway 中唯一有效用例是用於捕獲服務級批處理作業的結果。點選檢視和了解更多,關於何時使用 Pushgateway

使用 Docker 安裝 Pushgateway 服務:

docker run -d --name pushgateway -p 9091:9091 prom/pushgateway

此時,我們可以透過 http://localhost:9091 來訪問 Pushgateway 的 Dashboard。

EMQX 提供了一個配置 Pushgateway 服務的 API,可以將 EMQX 的資料指標透過配置上報到 Pushgateway 的服務地址中,並最終由 Prometheus 從 Pushgateway 中拉取資料指標。同時也可以直接在 EMQX Dashboard 中配置 Pushgateway 的服務地址,輸入完成後,點選更新即可。

5

使用 Pushgateway 需要在 Prometheus 的配置檔案的 scrape_configs 中新增如下配置:

注意:配置中的 targets 需要替換為您真實的 Pushgateway 服務地址。
# EMQX Pushgateway monitoring
- job_name: 'pushgateway'
  scrape_interval: 5s
  honor_labels: true
  static_configs:
    # Pushgateway IP address and port
    - targets: ['127.0.0.1:9091']

完成配置後,同樣根據上述中啟動 Prometheus 的操作,使用配置檔案啟動 Prometheus 服務,即可完成 EMQX 的監控配置。

配置 Grafana

在完成了使用 Prometheus 採集 EMQX 資料指標的配置後,我們就可以使用 Grafana 來視覺化監控 EMQX 的指標資料了。經過前文的準備工作,我們已經可以成功開啟 Grafana 的 Web 控制檯了。初次使用 Grafana 的預設賬號和密碼為 admin,登入成功後,我們就可以新增資料來源了。

新增 Prometheus 資料來源

使用 Grafana 可以將 Prometheus 作為資料來源,新增 Prometheus 資料來源的步驟如下:

  1. 點選左側的 Configuration,然後點選 Data Sources,進入資料來源配置頁面;
  2. 點選 Add data source,選擇 Prometheus
  3. HTTP 配置中,輸入 Prometheus 服務的地址,例如:http://127.0.0.1:9090
  4. 最後點選 Save & Test,如果配置正確,會顯示 Data source is working,表示配置成功。

6

配置完成後,我們就可以在 Grafana 中使用 Prometheus 作為資料來源來獲取監控資料了。接下來我們可以繼續新增 Dashboard 的模版來視覺化監控 EMQX 的資料指標,也可以手動新建一個 Dashboard,根據自己的需求來新增圖表。

匯入 Dashboard

我們提供給了一個預設的 Grafana 的 Dashboard 模板,可以直接匯入到 Grafana 中,然後選擇剛才新建的 Prometheus 資料來源,倒入成功後開啟監控皮膚後,就可以看到 EMQX 的監控資料了。

預設的 Dashboard 模板可以在 EMQX | Grafana Dashboard 中下載,也可以在 EMQX Dashboard 的 監控整合 配置頁面中的幫助頁面裡,點選 下載 按鈕下載。

具體的匯入步驟如下:

  1. 點選左側的 Import,進入匯入 Dashboard 的頁面;

7

  1. 點選 Upload JSON file,選擇剛才下載的 Dashboard 模來匯入,或直接輸入該地址在 Import via grafana.com 欄下的輸入框中;

8

  1. 點選 Load,選擇剛才新建的 Prometheus 資料來源,點選 Import,即可匯入 Dashboard 模板。

9

匯入 Dashboard 模板後,就可以在監控皮膚內看到 EMQX 的監控資料了,如下圖所示:

10

注意:該模版預設情況下將監控整個 EMQX 叢集下的指標資料

以下為該模版中預設顯示的指標:

  • 常規指標,包括連線數、主題數和訂閱數;
  • 訊息指標,包括髮布和接收的訊息數量,以及每秒釋出和接收的訊息數量;
  • 系統指標,包括程式數、CPU 和 Erlang VM 記憶體等(需要使用 Node Exporter);
  • 資料包文指標,包括連線、釋出、接收的報文數量等。

您也可以根據預設模版,自定義修改 Dashboard,新增自己需要的指標或修改圖表的樣式等。

在 EMQX Dashboard 中輕鬆配置整合 Prometheus

從 EMQX 5.0.11 版本起,使用者可以在 EMQX Dashboard 中的 功能配置 -> 監控 -> 監控整合 頁面中,選擇 Prometheus,並在該選項下點選「幫助」按鈕來獲取更多的監控整合操作資訊,在指導下更輕鬆地配置 Prometheus。

您只需要根據幫助頁面的步驟提示,安裝 Prometheus 和 Grafana 服務,然後在配置項填入一些關鍵的配置資訊,如 EMQX 的地址、獲取指標資料的 API 等,點選生成按鈕就可自動生成並下載配置檔案,還可以下載預設的 Grafana Dashboard 模板。

11

同樣在幫助頁面中,可以分為預設和使用 Pushgateway 兩種配置方式。使用 Pushgateway 的配置方式,可以在頁面中開啟啟動開關,輸入 Pushgateway 的地址和上報資料時間,點選儲存後,即可完成配置。

總結

本文介紹瞭如何使用 Prometheus 採集 EMQX 的資料指標,並使用 Grafana 對其進行視覺化監控。有關使用該監控系統中的規則和配置告警的更多詳細教程文章,敬請關注後續內容。

版權宣告: 本文為 EMQ 原創,轉載請註明出處。

原文連結:https://www.emqx.com/zh/blog/emqx-prometheus-grafana

相關文章