Grafana 仪表板创建
Grafana 仪表板创建
本节介绍如何创建 Grafana 仪表板来实时可视化工厂环境数据。学习完成后,您将能够:
- 配置 InfluxDB 数据源连接
- 创建实时环境数据仪表板
- 设计多类型图表面板(时间序列、仪表盘、统计值)
- 配置仪表板自动刷新和分享
在开始本节之前,请确保:
- Grafana 已安装并运行
- InfluxDB 中已有环境数据
- Node-RED Flow 正常运行并持续写入数据
- 了解 Grafana 基本操作流程
InfluxDB Data Source Configuration
Section titled “InfluxDB Data Source Configuration”Step 1: Add InfluxDB Data Source
Section titled “Step 1: Add InfluxDB Data Source”1. 访问 Grafana (http://localhost:3000)2. 默认登录: admin / admin3. 左侧菜单 → Configuration → Data Sources4. 点击 "Add data source"5. 搜索并选择 "InfluxDB"Step 2: Configure Connection
Section titled “Step 2: Configure Connection”数据源配置参数:
Query Language: FluxHTTP URL: http://influxdb:8086Access: Server (default)
Auth: 不需要(内部网络)Skip TLS Verify: ✓
InfluxDB Details: Organization: organization Token: [从 InfluxDB UI 复制的 Token] Default Bucket: nodered
点击 "Save & Test" 验证连接预期结果:显示 “Data source is working” 绿色提示
Dashboard Structure
Section titled “Dashboard Structure”Recommended Dashboard Layout
Section titled “Recommended Dashboard Layout”┌────────────────────────────────────────────────────────┐│ 标题: 工厂环境监测仪表板 (自动刷新: 5秒) │├──────────────────┬──────────────────┬──────────────────┤│ 当前温度 │ 当前湿度 │ 当前光照 ││ Stat 面板 │ Stat 面板 │ Stat 面板 ││ 26.5 °C │ 62.3 % │ 450 lux │├──────────────────┴──────────────────┴──────────────────┤│ 温度/湿度 时间序列图 ││ 双 Y 轴图表 │├────────────────────────────────────────────────────────┤│ 光照 时间序列图 │├──────────────────┬─────────────────────────────────────┤│ 温度仪表盘 │ 数据统计表 ││ Gauge 面板 │ 最近 1 小时统计 │└──────────────────┴─────────────────────────────────────┘Panel Creation Walkthrough
Section titled “Panel Creation Walkthrough”Panel 1: Current Temperature (Stat)
Section titled “Panel 1: Current Temperature (Stat)”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: 1Panel 2: Current Humidity (Stat)
Section titled “Panel 2: Current Humidity (Stat)”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: 1Panel 3: Current Light Level (Stat)
Section titled “Panel 3: Current Light Level (Stat)”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: 0Panel 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: 2Panel 5: Light Level Time Series
Section titled “Panel 5: Light Level Time Series”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: 10Panel 6: Temperature Gauge
Section titled “Panel 6: Temperature Gauge”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 + ValuePanel 7: Statistics Table
Section titled “Panel 7: Statistics Table”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: AutoDashboard Configuration
Section titled “Dashboard Configuration”Auto-Refresh
Section titled “Auto-Refresh”1. 点击仪表板右上角时间选择器2. 在 "Auto refresh" 中选择 "5s"3. 时间范围选择 "Last 1 hour"Dashboard Variables
Section titled “Dashboard Variables”添加变量实现动态筛选:
新增变量 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$/)Alert Configuration
Section titled “Alert Configuration”配置温度告警:1. 打开温度面板 → Alert 标签2. 配置规则: - Condition: last() > 30°C - For: 1m (持续 1 分钟触发)3. 通知: Email, Slack, Telegram 等Dashboard Export
Section titled “Dashboard Export”Export as JSON
Section titled “Export as JSON”1. 点击仪表板 "Settings"2. 选择 "JSON Model" 标签3. 复制 JSON 内容4. 保存到文件 (environment_monitoring_dashboard.json)Import to Another Grafana
Section titled “Import to Another Grafana”1. 新 Grafana → "+" → Import2. 粘贴 JSON 或上传文件3. 配置数据源映射4. 点击 "Import"仪表板验证检查清单
Section titled “仪表板验证检查清单”- 所有面板正确显示数据,无 “No data” 错误
- 温度、湿度、光照值实时更新(每 5 秒刷新)
- Stat 面板显示最新数值
- 时间序列图显示 1 小时趋势
- Gauge 面板正常显示阈值颜色
- 时间选择器功能正常
- 仪表板加载时间 < 3 秒
Issue 1: “No data” 错误
Section titled “Issue 1: “No data” 错误”症状:面板显示 “No data” 或空白
可能原因:
- 查询语法错误
- Bucket 名称错误
- 没有数据(新部署,等待数据写入)
解决方案:
- 使用 “Query Inspector” 检查原始查询输出
- 确认 Bucket 名称与 Node-RED 写入的一致
- 确认时间范围包含数据(改为 Last 15 minutes 测试)
Issue 2: 数据不更新
Section titled “Issue 2: 数据不更新”症状:数据显示但停止更新
可能原因:
- 自动刷新未启用
- InfluxDB 数据源连接断开
解决方案:
- 检查仪表板自动刷新设置
- 手动刷新浏览器测试
- 检查 InfluxDB 容器是否正常运行
- ✅ 推荐: 使用 Stat 面板展示实时值,Time Series 展示趋势
- ✅ 推荐: 配置合理的阈值着色,快速识别异常状态
- ✅ 推荐: 使用 Dashboard Variables 实现多设备切换
- ❌ 避免: 单个仪表板面板过多(建议不超过 10 个)
- ❌ 避免: 查询时间范围过大(影响加载速度)
- ❌ 避免: 生产环境密码使用默认 admin/admin
Summary
Section titled “Summary”本节要点总结:
- 数据源配置:Grafana 连接 InfluxDB,使用 Flux 查询语言
- 面板类型:Stat(当前值)、Time Series(趋势)、Gauge(仪表)、Table(统计)
- 实时更新:5 秒自动刷新,展示最新传感器数据
- 告警配置:基于数值阈值的自动告警通知
- 仪表板管理:JSON 导入导出,多环境复用