跳转到内容

Grafana 仪表板创建

Grafana 仪表板创建

本节介绍如何创建 Grafana 仪表板来实时可视化工厂环境数据。学习完成后,您将能够:

  • 配置 InfluxDB 数据源连接
  • 创建实时环境数据仪表板
  • 设计多类型图表面板(时间序列、仪表盘、统计值)
  • 配置仪表板自动刷新和分享

在开始本节之前,请确保:

  • Grafana 已安装并运行
  • InfluxDB 中已有环境数据
  • Node-RED Flow 正常运行并持续写入数据
  • 了解 Grafana 基本操作流程
1. 访问 Grafana (http://localhost:3000)
2. 默认登录: admin / admin
3. 左侧菜单 → Configuration → Data Sources
4. 点击 "Add data source"
5. 搜索并选择 "InfluxDB"
数据源配置参数:
Query Language: Flux
HTTP URL: http://influxdb:8086
Access: Server (default)
Auth: 不需要(内部网络)
Skip TLS Verify: ✓
InfluxDB Details:
Organization: organization
Token: [从 InfluxDB UI 复制的 Token]
Default Bucket: nodered
点击 "Save & Test" 验证连接

预期结果:显示 “Data source is working” 绿色提示

┌────────────────────────────────────────────────────────┐
│ 标题: 工厂环境监测仪表板 (自动刷新: 5秒) │
├──────────────────┬──────────────────┬──────────────────┤
│ 当前温度 │ 当前湿度 │ 当前光照 │
│ Stat 面板 │ Stat 面板 │ Stat 面板 │
│ 26.5 °C │ 62.3 % │ 450 lux │
├──────────────────┴──────────────────┴──────────────────┤
│ 温度/湿度 时间序列图 │
│ 双 Y 轴图表 │
├────────────────────────────────────────────────────────┤
│ 光照 时间序列图 │
├──────────────────┬─────────────────────────────────────┤
│ 温度仪表盘 │ 数据统计表 │
│ Gauge 面板 │ 最近 1 小时统计 │
└──────────────────┴─────────────────────────────────────┘
1. 点击 "New" → "Dashboard"
2. 点击 "Add new panel"
3. 选择可视化类型: "Stat"
4. 配置查询 (Flux):
from(bucket: "nodered")
|> range(start: -30s)
|> filter(fn: (r) => r._measurement == "environment")
|> filter(fn: (r) => r._field == "temperature")
|> last()
5. 配置显示选项:
- Title: 当前温度
- Value: 最后值 (Last)
- Unit: Celsius (°C)
- Color: 根据阈值着色
- 绿色: < 25°C
- 黄色: 25-30°C
- 红色: > 30°C
- Decimals: 1
1. 添加新面板 → 选择 "Stat"
2. 配置查询:
from(bucket: "nodered")
|> range(start: -30s)
|> filter(fn: (r) => r._measurement == "environment")
|> filter(fn: (r) => r._field == "humidity")
|> last()
3. 配置显示:
- Title: 当前湿度
- Unit: Percent (0-100)
- Value: Last
- Decimals: 1
1. 添加新面板 → 选择 "Stat"
2. 配置查询:
from(bucket: "nodered")
|> range(start: -30s)
|> filter(fn: (r) => r._measurement == "environment")
|> filter(fn: (r) => r._field == "lux")
|> last()
3. 配置显示:
- Title: 当前光照
- Unit: Lux
- Value: Last
- Decimals: 0

Panel 4: Temperature & Humidity Time Series

Section titled “Panel 4: Temperature & Humidity Time Series”
1. 添加新面板 → 选择 "Time Series"
2. 配置查询 A (温度):
from(bucket: "nodered")
|> range(start: now() - 1h)
|> filter(fn: (r) => r._measurement == "environment")
|> filter(fn: (r) => r._field == "temperature")
|> aggregateWindow(every: 10s, fn: mean)
3. 配置查询 B (湿度):
- 复制查询 A
- 修改 _field == "humidity"
- 点击 "+ Query" 添加
4. 配置显示:
- Title: 温度/湿度趋势
- Y-Axis Left: Temperature, Unit: Celsius, Min: 0, Max: 50
- Y-Axis Right: Humidity, Unit: Percent, Min: 0, Max: 100
- Legend: Show values
- 线条样式: Solid, Line Width: 2
1. 添加新面板 → 选择 "Time Series"
2. 配置查询:
from(bucket: "nodered")
|> range(start: now() - 1h)
|> filter(fn: (r) => r._measurement == "environment")
|> filter(fn: (r) => r._field == "lux")
|> aggregateWindow(every: 10s, fn: mean)
3. 配置显示:
- Title: 光照变化趋势
- Unit: Lux
- Legend: Show
- Fill opacity: 10
1. 添加新面板 → 选择 "Gauge"
2. 配置查询:
from(bucket: "nodered")
|> range(start: -30s)
|> filter(fn: (r) => r._measurement == "environment")
|> filter(fn: (r) => r._field == "temperature")
|> last()
3. 配置显示:
- Title: 温度仪表
- Min: 0, Max: 50
- Unit: Celsius
- Thresholds:
- Green: 0 to 25
- Yellow: 25 to 30
- Red: 30 to 50
- Show: Gauge + Value
1. 添加新面板 → 选择 "Table"
2. 配置查询:
from(bucket: "nodered")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "environment")
|> aggregateWindow(every: 1h, fn: mean)
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
3. 配置显示:
- Title: 最近 1 小时平均统计
- Table options: Show header, Row numbers
- Column width: Auto
1. 点击仪表板右上角时间选择器
2. 在 "Auto refresh" 中选择 "5s"
3. 时间范围选择 "Last 1 hour"

添加变量实现动态筛选:

新增变量 device_id:
1. 仪表板右上角 "Settings" → "Variables"
2. 点击 "Add variable"
3. 配置:
- Name: device
- Type: Query
- Query:
import "influxdata/influxdb/schema"
schema.tagValues(bucket: "nodered", tag: "device_id")
- Include All option: ✓
- Custom all value: .*
4. 在面板查询中使用变量:
|> filter(fn: (r) => r.device_id =~ /^$device$/)
配置温度告警:
1. 打开温度面板 → Alert 标签
2. 配置规则:
- Condition: last() > 30°C
- For: 1m (持续 1 分钟触发)
3. 通知: Email, Slack, Telegram 等
1. 点击仪表板 "Settings"
2. 选择 "JSON Model" 标签
3. 复制 JSON 内容
4. 保存到文件 (environment_monitoring_dashboard.json)
1. 新 Grafana → "+" → Import
2. 粘贴 JSON 或上传文件
3. 配置数据源映射
4. 点击 "Import"
  • 所有面板正确显示数据,无 “No data” 错误
  • 温度、湿度、光照值实时更新(每 5 秒刷新)
  • Stat 面板显示最新数值
  • 时间序列图显示 1 小时趋势
  • Gauge 面板正常显示阈值颜色
  • 时间选择器功能正常
  • 仪表板加载时间 < 3 秒

症状:面板显示 “No data” 或空白

可能原因

  • 查询语法错误
  • Bucket 名称错误
  • 没有数据(新部署,等待数据写入)

解决方案

  1. 使用 “Query Inspector” 检查原始查询输出
  2. 确认 Bucket 名称与 Node-RED 写入的一致
  3. 确认时间范围包含数据(改为 Last 15 minutes 测试)

症状:数据显示但停止更新

可能原因

  • 自动刷新未启用
  • InfluxDB 数据源连接断开

解决方案

  1. 检查仪表板自动刷新设置
  2. 手动刷新浏览器测试
  3. 检查 InfluxDB 容器是否正常运行
  • 推荐: 使用 Stat 面板展示实时值,Time Series 展示趋势
  • 推荐: 配置合理的阈值着色,快速识别异常状态
  • 推荐: 使用 Dashboard Variables 实现多设备切换
  • 避免: 单个仪表板面板过多(建议不超过 10 个)
  • 避免: 查询时间范围过大(影响加载速度)
  • 避免: 生产环境密码使用默认 admin/admin

本节要点总结:

  1. 数据源配置:Grafana 连接 InfluxDB,使用 Flux 查询语言
  2. 面板类型:Stat(当前值)、Time Series(趋势)、Gauge(仪表)、Table(统计)
  3. 实时更新:5 秒自动刷新,展示最新传感器数据
  4. 告警配置:基于数值阈值的自动告警通知
  5. 仪表板管理:JSON 导入导出,多环境复用