EMQX边缘节点监控:Prometheus Exporter配置
1. 痛点与解决方案
你是否正面临边缘计算环境中MQTT Broker监控难题?在物联网(IoT)和工业物联网(IIoT)场景下,边缘节点通常资源受限且网络不稳定,传统集中式监控方案往往面临以下挑战:
- 边缘设备离线导致监控数据丢失
- 带宽限制影响实时指标传输
- 资源受限环境下的性能开销问题
本文将详细介绍如何通过Prometheus Exporter配置,实现EMQX边缘节点的高效监控,解决上述痛点。完成阅读后,你将掌握:
- EMQX Prometheus Exporter的两种部署模式(Pull/Push)
- 定制化指标采集策略配置
- 边缘场景下的监控最佳实践
- Grafana可视化面板搭建
2. 技术架构概览
2.1 核心组件
EMQX边缘节点监控系统由以下组件构成:
| 组件 | 功能描述 | 资源占用 | 适用场景 |
|---|---|---|---|
| Prometheus Exporter | 内置HTTP服务器暴露指标端点 | ~5MB内存 | 网络条件良好的边缘节点 |
| Push Gateway | 接收指标并转发至Prometheus | ~10MB内存 | 网络不稳定的边缘环境 |
| Grafana | 可视化监控数据 | ~40MB内存 | 所有场景 |
| EMQX Metrics API | 提供原始指标数据 | 内置功能 | 自定义监控集成 |
2.2 架构流程图
3. 环境准备
3.1 硬件要求
边缘节点最低配置:
- CPU: 单核1GHz
- 内存: 256MB
- 存储: 100MB可用空间
- 网络: 支持TCP/IP协议栈
3.2 软件依赖
| 软件 | 版本要求 | 安装命令 |
|---|---|---|
| EMQX | 5.0+ | docker run -d --name emqx -p 1883:1883 -p 18083:18083 emqx/emqx:latest |
| Prometheus | 2.30+ | docker run -d --name prometheus -p 9090:9090 prom/prometheus:latest |
| Push Gateway | 1.4+ | docker run -d --name pushgateway -p 9091:9091 prom/pushgateway:latest |
| Grafana | 8.0+ | docker run -d --name grafana -p 3000:3000 grafana/grafana:latest |
4. 配置步骤
4.1 启用Prometheus Exporter
EMQX内置Prometheus插件,通过以下步骤启用:
4.1.1 命令行方式
# 进入EMQX容器
docker exec -it emqx /bin/sh
# 启用prometheus插件
emqx plugins enable emqx_prometheus
4.1.2 配置文件方式
编辑emqx.conf文件:
# 启用Prometheus插件
plugins.emqx_prometheus = on
# 设置Exporter监听端口
prometheus.port = 18083
# 设置指标路径
prometheus.path = /api/v5/prometheus/metrics
4.2 Pull模式配置(推荐网络稳定场景)
4.2.1 配置EMQX
# 配置指标采集间隔
emqx ctl config update prometheus '{"enable": true, "interval": "15s"}'
# 启用基本认证(可选)
emqx ctl config update prometheus '{"enable_basic_auth": true, "username": "emqx", "password": "public"}'
4.2.2 配置Prometheus
编辑prometheus.yml:
scrape_configs:
- job_name: 'emqx_edge'
scrape_interval: 15s
basic_auth:
username: 'emqx'
password: 'public'
static_configs:
- targets: ['emqx-edge-node-ip:18083']
4.3 Push模式配置(推荐网络不稳定场景)
4.3.1 配置EMQX Push Gateway
# 启用Push Gateway
emqx ctl config update prometheus '{
"push_gateway": {
"enable": true,
"url": "http://pushgateway-ip:9091",
"interval": "30s",
"job_name": "emqx_edge",
"headers": {
"Authorization": "Basic YWRtaW46cGFzc3dvcmQ="
}
}
}'
4.3.2 验证Push Gateway连接
# 查看EMQX日志确认推送状态
docker logs emqx | grep prometheus
预期输出:
2023-09-11T08:20:49.123Z [info] prometheus: push metrics to http://pushgateway-ip:9091 success
4. 指标采集配置
4.1 内置指标类别
EMQX Prometheus Exporter提供以下指标类别:
4.2 自定义采集配置
通过配置文件启用/禁用特定指标项:
{
"collectors": {
"vm_memory": true,
"vm_statistics": true,
"mnesia": false,
"vm_dist": false,
"vm_system_info": true,
"vm_msacc": false
}
}
4.3 边缘优化配置
针对资源受限的边缘节点,推荐以下优化配置:
{
"collectors": {
"vm_memory": true,
"vm_statistics": false,
"mnesia": false,
"vm_dist": false,
"vm_system_info": false,
"vm_msacc": false
},
"interval": "60s"
}
此配置仅保留内存指标,采集间隔延长至60秒,显著降低资源消耗。
5. 高级功能
5.1 指标过滤
通过正则表达式过滤不需要的指标:
emqx ctl config update prometheus '{
"metrics_filter": {
"include": ["^emqx_connections.*", "^emqx_messages.*"],
"exclude": ["^emqx_vm_.*"]
}
}'
5.2 告警规则配置
在Prometheus中配置边缘节点告警规则:
groups:
- name: emqx_edge_alerts
rules:
- alert: HighConnectionRate
expr: rate(emqx_connections_total[5m]) > 100
for: 2m
labels:
severity: warning
annotations:
summary: "高连接速率告警"
description: "边缘节点连接速率超过100连接/秒,持续2分钟"
- alert: HighMemoryUsage
expr: emqx_vm_memory_used_bytes / emqx_vm_memory_total_bytes > 0.8
for: 5m
labels:
severity: critical
annotations:
summary: "高内存使用率告警"
description: "内存使用率超过80%,持续5分钟"
6. Grafana可视化
6.1 导入EMQX Dashboard
- 登录Grafana,导航至"Dashboard" > "Import"
- 输入Dashboard ID: 17446
- 选择Prometheus数据源
- 点击"Import"
6.2 自定义边缘监控面板
为边缘节点创建专用面板,包含关键指标:
{
"panels": [
{
"title": "连接状态",
"type": "graph",
"targets": [
{
"expr": "emqx_connections_active",
"legendFormat": "活跃连接"
}
],
"interval": "30s"
},
{
"title": "消息吞吐量",
"type": "singlestat",
"targets": [
{
"expr": "rate(emqx_messages_received_total[1m])",
"legendFormat": "接收速率"
}
],
"interval": "1m"
},
{
"title": "内存使用率",
"type": "gauge",
"targets": [
{
"expr": "emqx_vm_memory_used_bytes / emqx_vm_memory_total_bytes * 100",
"legendFormat": "内存使用率"
}
],
"thresholds": "60,80"
}
]
}
6.3 边缘节点状态地图
使用Worldmap Panel插件展示全球边缘节点分布:
{
"title": "边缘节点分布",
"type": "worldmap",
"targets": [
{
"expr": "emqx_connections_active",
"legendFormat": "{{node}}",
"format": "table"
}
],
"seriesOverrides": [
{
"scalarUnit": "short",
"color": {
"mode": "thresholds"
},
"thresholds": [
{
"value": 0,
"color": "green"
},
{
"value": 100,
"color": "orange"
},
{
"value": 500,
"color": "red"
}
]
}
]
}
7. 边缘场景最佳实践
7.1 资源受限环境优化
-
指标精简:仅保留核心业务指标
{ "collectors": { "vm_memory": true, "vm_statistics": false, "mnesia": false } } -
延长采集间隔:根据业务需求调整至30-60秒
-
启用压缩:配置HTTP响应压缩
emqx ctl config update prometheus '{"enable_compression": true}'
7.2 离线缓存策略
在网络不稳定场景下,配置本地缓存:
# 启用本地文件缓存
emqx ctl config update prometheus '{
"local_cache": {
"enable": true,
"max_size": "100MB",
"path": "/var/lib/emqx/prometheus_cache"
}
}'
7.3 安全加固
边缘节点通常部署在非可信网络环境,需进行安全加固:
-
启用TLS:
emqx ctl config update prometheus '{ "tls": { "enable": true, "certfile": "/etc/emqx/certs/server.pem", "keyfile": "/etc/emqx/certs/server.key" } }' -
IP白名单:
emqx ctl config update prometheus '{ "ip_whitelist": ["192.168.1.0/24", "10.0.0.0/8"] }'
8. 故障排除
8.1 常见问题解决
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 指标端点无法访问 | 端口未开放或防火墙限制 | 检查端口配置和防火墙规则 |
| Push Gateway无数据 | 网络不通或认证失败 | 检查URL和认证头配置 |
| 指标重复 | 节点名称冲突 | 为每个边缘节点配置唯一job_name |
| 内存占用过高 | 采集配置不当 | 禁用不必要的指标项 |
8.2 诊断命令
# 检查Prometheus插件状态
emqx plugins status emqx_prometheus
# 查看指标端点响应
curl -u emqx:public http://localhost:18083/api/v5/prometheus/metrics
# 查看推送状态
emqx ctl log query "prometheus"
9. 总结与展望
本文详细介绍了EMQX边缘节点Prometheus Exporter的配置方法,包括Pull/Push两种模式的部署、指标采集策略优化、Grafana可视化及边缘场景最佳实践。通过合理配置,可在资源受限的边缘环境中实现高效、可靠的MQTT Broker监控。
未来,EMQX将进一步增强边缘监控能力,包括:
- 边缘计算节点自动发现
- 基于机器学习的异常检测
- 轻量级边缘专用监控代理
10. 附录:核心指标参考
| 指标名称 | 类型 | 描述 | 边缘场景重要性 |
|---|---|---|---|
| emqx_connections_active | Gauge | 当前活跃连接数 | ★★★★★ |
| emqx_messages_received_total | Counter | 接收消息总数 | ★★★★☆ |
| emqx_messages_sent_total | Counter | 发送消息总数 | ★★★★☆ |
| emqx_vm_memory_used_bytes | Gauge | 内存使用量 | ★★★★★ |
| emqx_session_persistent_count | Gauge | 持久会话数 | ★★★☆☆ |
| emqx_node_status | Gauge | 节点状态(1=正常,0=异常) | ★★★★★ |
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



