作为一款全球下载量超千万的大规模分布式物联网 MQTT 服务器,最新发布的 EMQX 5.0 不仅全球首个达成单集群 1 亿 MQTT 连接支持,也是首个将 QUIC 引入 MQTT 的开创性产品。如今,EMQX 在各个行业为高可靠、高性能的物联网实时数据移动、处理和集成提供着动力,助力企业构建关键业务的 IoT 应用。
在使用 EMQX 的过程中,不管是用户、运维人员还是开发者,都需要对其运行状态及产生的指标数据进行监控与观察,以便及时发现问题并处理。除使用内置的 Dashboard 以外,我们还可以通过 EMQX 提供的 API 来将监控数据集成到第三方监控平台中,对包括集群节点状态、连接、订阅主题数、消息吞吐量等 EMQX 运行状态相关指标进行监控。
使用第三方监控系统对 EMQX 进行监控有如下好处:
本文将以 Prometheus 和 Grafana 为例,介绍如何将 EMQX 5.0 的监控数据集成到 Prometheus 中,使用 Grafana 来展示 EMQX 的监控数据,并最终搭建出一个简单的 EMQX 监控系统。
Prometheus 是由 SoundCloud 开源的监控告警解决方案,支持多维数据模型、灵活的查询语言、强大的告警管理等特性。
Grafana 是一款开源的数据可视化工具,支持多种数据源,包括 Prometheus。
在开始之前,我们需要先准备好以下运行环境,安装并运行所需要的软件工具。本文示例将使用 Docker 来安装和启动,读者也可根据文章中提供的官方下载地址,自行下载安装包进行安装。
使用 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 已经安装成功。
同样,示例中我们将使用 Docker 的方式来快速安装和使用 Prometheus,因为此时我们还没有开始配置 Prometheus,所以可以先下载一份 Prometheus 官方提供的 Docker 镜像。
docker pull prom/prometheus
在安装完成后,需要配置一份 Prometheus 的配置文件,用于指定 Prometheus 的数据源,以及告警规则等信息。因此可先将 Prometheus 的配置文件配置好,在启动时将配置文件挂载到容器中运行即可。具体配置步骤请见后文。
除使用 Docker 外,也可以参考 Prometheus 官方文档,下载和使用二进制包来安装和运行 Prometheus。
使用 Docker 快速安装和启动 Grafana:
docker run -d --name grafana -p 3000:3000 grafana/grafana-oss
读者也可以参考 Grafana 官方文档,下载和使用二进制包来安装和运行 Grafana。
当 Grafana 启动完成后,我们可以打开 http://localhost:3000
来访问 Grafana,如果能够正常访问到 Grafana 的登录页面,此时说明 Grafana 已经安装成功。
这是一个可选的步骤。
如果想要监控部署 EMQX 的主机信息,可以使用 Node Exporter 来获取主机的信息。Node Exporter 用于收集服务器的监控数据,例如 CPU、内存、磁盘、网络等信息。
注意:Node Exporter 仅支持获取 Linux 系统的监控数据
本文不建议使用 Docker 来安装 Node Exporter。安装完成后,我们可以通过 http://localhost:9100/metrics
来访问 Node Exporter 的监控数据。如果可以访问到系统主机的监控数据,说明 Node Exporter 已经安装成功。
完成上述的准备工作后,我们需要配置 Prometheus,使 Prometheus 可以正常采集到 EMQX 的监控数据。
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 服务了。如果您是使用 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 的监控数据。
除直接通过使用包含 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 的服务地址,输入完成后,点击更新即可。
使用 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 的监控配置。
在完成了使用 Prometheus 采集 EMQX 数据指标的配置后,我们就可以使用 Grafana 来可视化监控 EMQX 的指标数据了。经过前文的准备工作,我们已经可以成功打开 Grafana 的 Web 控制台了。初次使用 Grafana 的默认账号和密码为 admin
,登录成功后,我们就可以添加数据源了。
使用 Grafana 可以将 Prometheus 作为数据源,添加 Prometheus 数据源的步骤如下:
Configuration
,然后点击 Data Sources
,进入数据源配置页面;Add data source
,选择 Prometheus
;HTTP
配置中,输入 Prometheus 服务的地址,例如:http://127.0.0.1:9090
;Save & Test
,如果配置正确,会显示 Data source is working
,表示配置成功。配置完成后,我们就可以在 Grafana 中使用 Prometheus 作为数据源来获取监控数据了。接下来我们可以继续添加 Dashboard 的模版来可视化监控 EMQX 的数据指标,也可以手动新建一个 Dashboard,根据自己的需求来添加图表。
我们提供给了一个默认的 Grafana 的 Dashboard 模板,可以直接导入到 Grafana 中,然后选择刚才新建的 Prometheus 数据源,倒入成功后打开监控面板后,就可以看到 EMQX 的监控数据了。
默认的 Dashboard 模板可以在 EMQX | Grafana Dashboard 中下载,也可以在 EMQX Dashboard 的 监控集成
配置页面中的帮助页面里,点击 下载
按钮下载。
具体的导入步骤如下:
点击 Upload JSON file
,选择刚才下载的 Dashboard 模板 来导入,或直接输入 https://grafana.com/grafana/dashboards/17446-emqx/ 地址在 Import via grafana.com
栏下的输入框中;
Load
,选择刚才新建的 Prometheus 数据源,点击 Import
,即可导入 Dashboard 模板。导入 Dashboard 模板后,就可以在监控面板内看到 EMQX 的监控数据了,如下图所示:
注意:该模版默认情况下将监控整个 EMQX 集群下的指标数据
以下为该模版中默认显示的指标:
您也可以根据默认模版,自定义修改 Dashboard,添加自己需要的指标或修改图表的样式等,具体操作步骤可参考 Grafana 官方文档。
从 EMQX 5.0.11 版本起,用户可以在 EMQX Dashboard 中的 功能配置
-> 监控
-> 监控集成
页面中,选择 Prometheus,并在该选项下点击「帮助」按钮来获取更多的监控集成操作信息,在指导下更轻松地配置 Prometheus。
您只需要根据帮助页面的步骤提示,安装 Prometheus 和 Grafana 服务,然后在配置项填入一些关键的配置信息,如 EMQX 的地址、获取指标数据的 API 等,点击生成按钮就可自动生成并下载配置文件,还可以下载默认的 Grafana Dashboard 模板。
同样在帮助页面中,可以分为默认和使用 Pushgateway 两种配置方式。使用 Pushgateway 的配置方式,可以在页面中打开启动开关,输入 Pushgateway 的地址和上报数据时间,点击保存后,即可完成配置。
更多关于如何在 Dashboard 中配置集成 Prometheus 的信息,可以参考 EMQ X Dashboard 配置监控集成的文档。
本文介绍了如何使用 Prometheus 采集 EMQX 的数据指标,并使用 Grafana 对其进行可视化监控。
阅读我们的指标监控文档,了解更多关于您可以查询到的数据指标。
有关使用该监控系统中的规则和配置告警的更多详细教程文章,敬请关注后续推送。
版权声明: 本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/emqx-prometheus-grafana