EMQX+Prometheus+Grafana:MQTT 数据可视化监控实践

news2024/11/18 21:45:55

前言

作为一款全球下载量超千万的大规模分布式物联网 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 包安装,具体安装方法请参考 EMQX 5.0 安装指南。

安装完成后,我们可以打开 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 中唯一有效用例是用于捕获服务级批处理作业的结果。

使用 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

  2. 点击 Upload JSON file,选择刚才下载的 Dashboard 模板 来导入,或直接输入 https://grafana.com/grafana/dashboards/17446-emqx/ 地址在 Import via grafana.com 栏下的输入框中;

8

  1. 点击 Load,选择刚才新建的 Prometheus 数据源,点击 Import,即可导入 Dashboard 模板。

9

导入 Dashboard 模板后,就可以在监控面板内看到 EMQX 的监控数据了,如下图所示:

10

注意:该模版默认情况下将监控整个 EMQX 集群下的指标数据

以下为该模版中默认显示的指标:

  • 常规指标,包括连接数、主题数和订阅数;
  • 消息指标,包括发布和接收的消息数量,以及每秒发布和接收的消息数量;
  • 系统指标,包括进程数、CPU 和 Erlang VM 内存等(需要使用 Node Exporter);
  • 数据报文指标,包括连接、发布、接收的报文数量等。

您也可以根据默认模版,自定义修改 Dashboard,添加自己需要的指标或修改图表的样式等,具体操作步骤可参考 Grafana 官方文档。

在 EMQX Dashboard 中轻松配置集成 Prometheus

从 EMQX 5.0.11 版本起,用户可以在 EMQX Dashboard 中的 功能配置 -> 监控 -> 监控集成 页面中,选择 Prometheus,并在该选项下点击「帮助」按钮来获取更多的监控集成操作信息,在指导下更轻松地配置 Prometheus。

您只需要根据帮助页面的步骤提示,安装 Prometheus 和 Grafana 服务,然后在配置项填入一些关键的配置信息,如 EMQX 的地址、获取指标数据的 API 等,点击生成按钮就可自动生成并下载配置文件,还可以下载默认的 Grafana Dashboard 模板。

11

同样在帮助页面中,可以分为默认和使用 Pushgateway 两种配置方式。使用 Pushgateway 的配置方式,可以在页面中打开启动开关,输入 Pushgateway 的地址和上报数据时间,点击保存后,即可完成配置。

更多关于如何在 Dashboard 中配置集成 Prometheus 的信息,可以参考 EMQ X Dashboard 配置监控集成的文档。

总结

本文介绍了如何使用 Prometheus 采集 EMQX 的数据指标,并使用 Grafana 对其进行可视化监控。

阅读我们的指标监控文档,了解更多关于您可以查询到的数据指标。

有关使用该监控系统中的规则和配置告警的更多详细教程文章,敬请关注后续推送。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/emqx-prometheus-grafana

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云服务器地域和可用区常见问题及官方资料解答

阿里云服务器同一地域分为多个可用区,不同地域的实例之间内网互不相通;选择靠近您客户的地域,可降低网络时延、提高您客户的访问速度。本文介绍阿里云地域和可用区的概念、选择指导、两者的关系以及阿里云支持的地域和可用区列表。 一.地域…

MySQL客户端的进阶操作

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:土豆娃娃文章来源:社区投稿 引言 作为一个MySQL数据库从业者,我们最常用的工具就是my…

极米RS Pro 2值得买吗?极米科技这款4K投影真实体验怎么样?

2022电商的最后一场狂欢购物节“双十二”已到来,许多小伙伴想趁此次机会购置一些礼物给辛苦一年的自己和家人。但礼物怎么选?选什么?又成为了困扰大家的一大问题。要说送礼物,无论是自己还是家人,实用的家电是最不容易…

SRv6----控制平面

学习了SRv6----报文转发流程后,下一步学习SRv6的控制平面及SID是如何在SRv6网内传递学习的。 首先回顾一下回顾一下链路状态路由协议,基于Dijkstra SPF(Shortest Path First,最短路径优先)算法计算到达指定地址的最短路…

基于倾斜模型、地形DEM高程点的批量自动提取

我们在进行前期的规划分析的时候,总是离不开地形条件等限制性因素。这次分享一个小的操作技巧,利用倾斜模型、DEM数据批量自动提取高程点,用来计算坡度、坡向、填挖方、流域分析等等。 分享一下在图新地球工具软件基于倾斜模型、地形DEM如何…

华为数字化转型之道 实践篇 第六章 数字化重构业务运作模式【进行中】

第六章 数字化重构业务运作模式 数字化转型从企业业务战略出发,通过数字化手段来重构核心业务运作模式,以实现客户交易更简单、内部作业更高效、运营管理更便捷。 6.1 业务运作模式重构是数字化转型的核心 利用数字化技术创新业务运作模式,通过重构业务流程提升企业运作效…

【openGauss/MogDB的uncommitted xmin问题解决】

一、问题现象 在测试openGauss/MogDB的时候,发现主库查询snapshot.tables_snap_timestamp这个表的时候,一select *,数据库就宕机,而备库是正常的。因为是测试环境不存在数据量太多的情况。所以最开始初步怀疑有数据页损坏了。 …

项目中less常用的一些东西

一、less简介 LESSCSS是一种动态样式语言,简称LESS,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS赋予了动态语言的特性,如变量、继承、运算、函数等,更方便CSS的编写和维护 LESS可以在多种语言、环…

Serverless初探

文中插图来自极客时间 今天听了市场部门分享的serverless, 打算用自己的话总结一下。 一般来说,每一个网络应用背后的原型都是:客户端服务端,通过相互传递消息(发起请求,返回响应) 从研发体系角度看&…

L2聚宽量化交易系统怎样实现股票量化策略?

L2聚宽量化交易系统怎样实现股票量化策略呢?说到这个问题,首先大家先想想,我们进行股票量化投资无非就是为了更高效的把握股票盈利的机会,但是往往在量化过程中,对聚宽量化交易系统的操作不了解,减少了自己…

ChatGPT可以一本正经的胡说八道,其他AI可以吗?

目录 1.ChatGPT是什么? 2.它是哪个公司开发的? 3.TA会做什么? 写文章 写代码 聊天 4.总结 1.ChatGPT是什么? ChatGPT是由人工智能实验室OpenAI上线的一款由 聊天机器人模型新模型,暂时网页版允许用户免费使用&…

树莓派下载及安装PyCharm软件

PyCharm 有专业版和社区版。专业版的功能更全,但是要收费,社区版是免费的,所以推荐下载这个版本。 通过点击这个链接:https://www.jetbrains.com/pycharm/download/#sectionlinux下载 Pycharm软件。 注意我们要下载的是 Linux 版本的软件。 …

直播怎么录屏,妙招分享,亲测好用!

看直播怎么录制屏幕视频?直播怎么录屏?无论是网络直播课程还是游戏主播直播,很多朋友都想在观看时录制,方便后面再次回顾。事实上,录制直播视频的方法很简单。今天,小编就来分享一个亲测好用的妙招。 一、手…

圣诞节会呼吸的玫瑰爱心代码 一起浪漫吧

源码下载地址:会呼吸、带有玫瑰花的爱心告白程序-Java文档类资源-CSDN下载 粉丝可直接私信我领取。 前言 之前有部电视剧《点燃我温暖你》没火,但是其中李峋的爱心代码却在程序圈超级火,这圣诞节快到了了,给大家来一波爱心代码…

CH36X系列芯片Windows系统使用教程

概述 CH365是一个连接PCI总线的通用接口芯片,CH367/CH368是连接PCI-Express总线的通用接口芯片。支持I/O端口映射、存储器映射、扩展ROM以及中断,提供主动并口、SPI、I2C、GPIO等硬件接口。基于如上芯片可将PCI/PCIe总线转换为简便易用的类似于ISA总线的…

【车载开发系列】UDS诊断---例程控制($0x31)

【车载开发系列】UDS诊断—例程控制($0x31) UDS诊断---例程控制($0x31)【车载开发系列】UDS诊断---例程控制($0x31)一.概念定义1)RoutineControl服务2)例程的概念3)例程的…

如何使用腾讯云轻量应用服务器搭建免费开源企业CMS?

1.背景概述 腾讯云轻量应用服务器是新一代面向中小企业及开发者的云服务器产品,简单易用,一站式融合多款云服务,能帮助用户在云端快速构建网站、博客、电商、论坛等各类应用以及各类开发测试环境。 PbootCMS是一款针对企业网站开发的国产CM…

Docker+Node-exporter+Prometheus+Grafana

载docker-compose容器编排并授权x curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose && chmod x /usr/local/bin/docker-compose所有客户端服务器node-exporter的dock…

[附源码]JAVA毕业设计婴幼儿玩具共享租售平台(系统+LW)

[附源码]JAVA毕业设计婴幼儿玩具共享租售平台(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

C中的auto、static、register、extern、const和volitate

C语言中的每一个变量和函数有两个属性:数据类型和数据的存储类别。数据类型(整形、字符型等),存储类别是指数据在内存中存储的方法,存储方法有两大类:静态存储类和动态存储类。具体包括四种:自动…