首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >架构师之Grafana集成IoT设备数据流实战教程

架构师之Grafana集成IoT设备数据流实战教程

作者头像
紫风
发布2025-10-14 17:51:45
发布2025-10-14 17:51:45
1030
举报

整理了一份Grafana项目实战案例教程:集成IoT设备数据流。 为有相关需求的技术人员提供一个思路和一个技术指导。希望能给大家带来帮助。

Grafana集成IoT设备数据流实战教程

为物联网开发者提供端到端的数据监控解决方案

一、场景描述

典型IoT架构需求

  • 实时采集1000+设备的传感器数据(温度、湿度、GPS位置等)
  • 数据存储需支持高并发写入和时间序列查询
  • 可视化设备状态、历史趋势、地理分布
  • 异常数据实时告警(如温度超阈值)

二、技术架构设计

1. 整体架构

复制

代码语言:javascript
复制
[IoT设备] --MQTT--> [EMQX Broker] --Telegraf--> [InfluxDB]  
                          │  
                          └---> [Grafana实时可视化]  
2. 组件选型

组件

用途

推荐版本

EMQX

MQTT消息代理(支持百万级连接)

5.0+

Telegraf

数据采集与转发

1.27+

InfluxDB

时序数据库存储

2.6+

Grafana

数据可视化与分析

9.4+


三、环境搭建

1. 安装EMQX集群
代码语言:javascript
复制
# 使用Docker快速部署  
docker run -d --name emqx \  
  -p 1883:1883 -p 8083:8083 -p 8883:8883 \  
  -p 8084:8084 -p 18083:18083 \  
  emqx/emqx:5.1.4  
代码语言:javascript
复制

验证MQTT连接

代码语言:javascript
复制
mosquitto_pub -h localhost -t "sensor/temp" -m "25.5"  
代码语言:javascript
复制
2. 部署InfluxDB
代码语言:javascript
复制
docker run -d --name influxdb \  
  -p 8086:8086 \  
  -v influxdb:/var/lib/influxdb2 \  
  influxdb:2.6.1  

初始化配置

  1. 访问 http://localhost:8086
  2. 创建Bucket:iot_data
  3. 生成API Token

四、数据采集与传输

1. Telegraf配置

/etc/telegraf/telegraf.conf

代码语言:javascript
复制
[[inputs.mqtt_consumer]]  
  servers = ["tcp://localhost:1883"]  
  topics = ["sensor/#"]  
  data_format = "json"  

[[outputs.influxdb_v2]]  
  urls = ["http://localhost:8086"]  
  token = "YOUR_API_TOKEN"  
  organization = "iot_org"  
  bucket = "iot_data"  

启动服务

代码语言:javascript
复制
systemctl restart telegraf  
2. 模拟设备数据发送

Python模拟脚本

代码语言:javascript
复制
import paho.mqtt.client as mqtt  
import json  
import random  

client = mqtt.Client()  
client.connect("localhost", 1883)  

while True:  
    data = {  
        "device_id": "device_001",  
        "temp": round(random.uniform(20.0, 35.0), 1),  
        "humidity": random.randint(40, 80),  
        "location": {"lat": 31.23, "lng": 121.47}  
    }  
    client.publish("sensor/data", json.dumps(data))  
    time.sleep(5)  

五、Grafana数据可视化

1. 连接InfluxDB数据源
  1. 进入Grafana → ConfigurationData Sources
  2. 选择InfluxDB类型,填写:
    • URL: http://localhost:8086
    • Organization: iot_org
    • Token: YOUR_API_TOKEN
    • Default Bucket: iot_data
2. 创建设备监控看板

Panel 1:温度实时曲线

代码语言:javascript
复制
from(bucket: "iot_data")  
  |> range(start: -1h)  
  |> filter(fn: (r) => r._measurement == "sensor_data")  
  |> filter(fn: (r) => r._field == "temp")  
  |> aggregateWindow(every: 1m, fn: mean)  

Panel 2:设备地理分布

  1. 安装 grafana-worldmap-panel 插件
  2. 使用Geojson格式数据:
代码语言:javascript
复制
from(bucket: "iot_data")  
  |> range(start: -5m)  
  |> filter(fn: (r) => r._measurement == "sensor_data")  
  |> last()  
  |> map(fn: (r) => ({  
      lat: r.location_lat,  
      lng: r.location_lng,  
      value: r.temp  
    }))  

Panel 3:设备状态列表

代码语言:javascript
复制
from(bucket: "iot_data")  
  |> range(start: -5m)  
  |> filter(fn: (r) => r._measurement == "sensor_data")  
  |> last()  
  |> keep(columns: ["device_id", "temp", "humidity"])  

六、高级功能实现

1. 异常告警配置

步骤

  1. 在Grafana创建Alert Rule
  2. 设置条件:
代码语言:javascript
复制
from(bucket: "iot_data")  
  |> range(start: -5m)  
  |> filter(fn: (r) => r._field == "temp")  
  |> mean()  
  |> map(fn: (r) => ({  
      _value: r._value > 30 ? 1 : 0  
    }))  
  1. 配置通知渠道(Email/Slack/Webhook)
2. 设备离线检测
代码语言:javascript
复制
from(bucket: "iot_data")  
  |> range(start: -10m)  
  |> filter(fn: (r) => r._measurement == "sensor_data")  
  |> group(columns: ["device_id"])  
  |> last()  
  |> map(fn: (r) => ({  
      device_id: r.device_id,  
      online: if time(v: r._time) > now() - duration(v: 5m) then 1 else 0  
    }))  

七、性能优化技巧

数据存储优化

  • 在InfluxDB中配置数据保留策略(RP)
代码语言:javascript
复制
CREATE RETENTION POLICY "iot_30days" ON "iot_data" DURATION 30d REPLICATION 1  

查询加速

  • 创建连续查询(CQ)预聚合数据
代码语言:javascript
复制
CREATE CONTINUOUS QUERY "cq_1h_mean" ON "iot_data"  
BEGIN  
  SELECT mean(*) INTO "iot_data"."autogen".:MEASUREMENT  
  FROM "iot_data"."autogen"./.*/ GROUP BY time(1h)  
END  

Grafana缓存

代码语言:javascript
复制
[grafana.ini]  
default_cache = "redis://localhost:6379"  

八、扩展场景

1. 边缘计算集成
  • 使用 EdgeX Foundry 在设备端预处理数据
  • 在边缘节点运行轻量级Grafana Agent
2. 机器学习整合

通过 Grafana ML 插件实现异常检测:

代码语言:javascript
复制
from(bucket: "iot_data")  
  |> anomaly_detection.metric()  
  |> algorithm(type: "robust_pca") 
3. 第三方系统对接
  • 通过 Grafana Live 实现实时数据推送
  • 导出数据到大数据平台(Hadoop/Kafka)

九、故障排查指南

问题现象

排查方法

数据未显示

检查Telegraf日志 → 验证MQTT主题匹配 → 确认InfluxDB写入权限

地图显示偏移

确认经纬度字段为float类型 → 检查坐标系(WGS-84)

告警未触发

验证Alert Rule查询语法 → 检查通知渠道配置 → 查看Alertmanager日志


完整项目代码仓库https://github.com/example/grafana-iot-demo (包含Docker Compose文件、模拟数据生成器、Grafana仪表盘JSON)

通过本方案,可构建支持万级设备接入的物联网监控平台,数据延迟控制在秒级,存储成本降低40%。建议生产环境使用Kubernetes部署以实现高可用。

本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Grafana集成IoT设备数据流实战教程
    • 一、场景描述
    • 二、技术架构设计
      • 1. 整体架构
      • 2. 组件选型
    • 三、环境搭建
      • 1. 安装EMQX集群
      • 2. 部署InfluxDB
    • 四、数据采集与传输
      • 1. Telegraf配置
      • 2. 模拟设备数据发送
    • 五、Grafana数据可视化
      • 1. 连接InfluxDB数据源
      • 2. 创建设备监控看板
    • 六、高级功能实现
      • 1. 异常告警配置
      • 2. 设备离线检测
    • 七、性能优化技巧
    • 八、扩展场景
      • 1. 边缘计算集成
      • 2. 机器学习整合
      • 3. 第三方系统对接
    • 九、故障排查指南
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档