MQTT Broker 性能監控最佳佈建方案 - EMQX(二)
Docker compose 一鍵部署完整監控系統組件
前言
成功建立EMQX來作為MQTT的大腦之後 ,對於Server是否能承受相應的資源消耗是一個難以估量的場景,而透過監控性能上的變化,再由一個能及時反饋當前狀況的圖表。 相信能夠讓我們更進一步的去應對接下來會預期到的風險。
但僅僅是如此還不能達到像標題描述的那麼厲害,我們需要一個有別於過去一個個組件安裝完成再進行資料串接的安裝方式。 讓自己可以更早下班😂
而這就會提到今天的主角 Docker compose !! ,比Docker再更進階一些,但是可以一次部署多個Docker來達到一鍵啟動所有組件
開始之前
在正式進入我們今日主題之前,會需要準備的工具如下
- Virtual Machine (Centos,Ubuntu)
- Docker
- Docker Compose
- git
- Docker安裝可以參照官方連結選擇合適的作業系統
- git 安裝
-
1
sudo apt install git #Ubuntu
-
1
sudo yum install git #Centos
-
前置步驟
-
透過Git抓取本次檔案 並進入該資料夾
1 2
git clone https://github.com/as183789043/EMQX-Single_Node_Monitor.git cd EMQX-Single_Node_Monitor
-
新增檔案並修改權限 (理論上Docker compsoe 可以自己建立,但筆者實作時會有權限問題,故改為手動建立)
1 2
mkdir emqx1_data chmod 777 emqx1_data
2024/03/03更新 排除手動修改權限操作透過在檔案 docker-compose.yaml 新增一個busybox容器,代替過去手動設定權限的方式 再將原emqx容器的啟動順序更改為等待busybox任務完成之後
-
啟動檔案
1
docker compose up -d
到這裡就成功將所有監控組件啟動了,我們進入下一階段
檔案內容說明
對於拉取下來的檔案具體做了哪些事情,以及程式碼的細部講解都會在這個章節進行說明
-
docker-compose.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
version: '3' services: busybox: image: busybox:latest container_name: bustybox volumes: - ./emqx1_data/:/root/emqx1_data/ command: [ "chown", "-R","1000:1000" ,"root/emqx1_data"] networks: - emqx-bridge emqx1: image: emqx:5.3.2 container_name: emqx1 healthcheck: test: ["CMD", "/opt/emqx/bin/emqx ctl", "status"] interval: 30s timeout: 60s retries: 5 ports: - 1883:1883 - 8083:8083 - 8084:8084 - 8883:8883 - 18083:18083 volumes: - ./emqx1_data/:/opt/emqx/data networks: emqx-bridge: aliases: - node1.emqx.io depends_on: 'busybox': condition: service_completed_successfully prometheus: image: prom/prometheus container_name: prometheus volumes: - ./prometheus.yaml:/etc/prometheus/prometheus.yaml command: --config.file=/etc/prometheus/prometheus.yaml ports: - 9090:9090 networks: - emqx-bridge pushgateway: image: prom/pushgateway container_name: pushgateway ports: - 9091:9091 networks: - emqx-bridge node-exporter: image: prom/node-exporter container_name: node-exporter ports: - 9100:9100 networks: - emqx-bridge grafana: image: grafana/grafana-oss container_name: grafana ports: - 3000:3000 networks: - emqx-bridge networks: emqx-bridge: driver: bridge
docker-compose.yaml 說明version : '3' 是目前docker compose的固定版本 可根據官網發布進行調整 services : 各個組件的服務名稱(emqx1、prometheus) container_name : 在虛擬機上的容器識別名稱 ports : 前者是外部連線port 後者是內部port volumes : 外部文件掛載到容器的位置 networks : 使用的網卡,同一張容器才會互通 command : 指定容器的啟動命令 depends_on : 指定容器要在誰之後啟動 保證相依性 depends_on > condition : 進一步限定前一個容器完成特定條件才會啟動當前容器 networks > emqx-bridge > driver : 定義網卡名為emqx-bridge 使用橋接模式
-
prometheus.yaml -> 透過EMQX網頁生成。Targets在同一張網卡可以直接寫<容器名稱:port>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
global: scrape_interval: 15s # The default scrape interval is every 10 seconds. evaluation_interval: 15s # 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: - job_name: 'node-exporter' scrape_interval: 5s static_configs: # node-exporter IP address and port - targets: ['node-exporter:9100'] labels: instance: dashboard-local # EMQX Pushgateway monitoring - job_name: 'pushgateway' scrape_interval: 5s honor_labels: true static_configs: # Pushgateway IP address and port - targets: ['pushgateway:9091']
-
dashboard.json ->作為 Garfana儀錶板之模板設定檔
資料串接設定
重要組件連線資訊 第一次登入要修改密碼
Service | Port | Username | Password |
---|---|---|---|
Grafana | 3000 | admin | public |
EMQX | 18083 | admin | admin |
EMQX推送資訊設定
注意!!Pushgateay要輸入 <容器名稱:port>才能正確傳輸資料 如果要生成自己的prometheus可以點選幫助來產生
Grafana 設定資料來源
上一步驟將EMQX資料推至Prometheus。那麼在Grafana就要相應的將Prometheus設置為來源
選擇Prometheus後輸入輸入連線位置
其他保持預設 點選Save&test有綠色提示代表來源連接成功
匯入模板
依照以下路徑點選至匯入儀表板介面 Home > Dashboards >New > Import dashboard
確定名稱及所屬Grafana路徑後點選 import
最後結果
匯入模板成功,就會看到一個類似下圖的儀表板
結語
雖然是快速部署,但在前期準備docker-compose.yaml會需要一些基礎知識,才能夠將容器進行完整打包。這部分筆者也是一邊試錯,一邊打包。 但相對的,未來在其他環境需要重現這樣的架構。就可以輕鬆的還原。節省未來花費的時間
另外是本篇文章著重架設監控系統,但Grafana還可以針對特定數值異常時發出警告。相關設定就留給各位去探索囉~~ 下課!!