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还可以针对特定数值异常时发出警告。相关设定就留给各位去探索啰~~ 下课!!