阿飞
阿飞
发布于 2025-08-04 / 14 阅读
0
0

Grafana接入TimescaleDB的完整流程(含实时+聚合展示)

🎆实现效果如下

📊 Grafana 接入 TimescaleDB 的完整流程(含实时+聚合展示)

内容包括:

  1. Grafana 容器配置

  2. Grafana 数据源连接 PostgreSQL(TimescaleDB)

  3. 两个典型面板:

    • ✅ 实时温湿度数据(折线图)

    • ✅ 每小时平均值(聚合视图)


🧩 1. 修改 docker-compose.yml 加入 Grafana

将 Grafana 服务加入你当前的 docker-compose.yml

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana_data:/var/lib/grafana
    depends_on:
      - timescaledb
    restart: unless-stopped

volumes:
  timescale_data:
  grafana_data:

🚀 2. 启动容器

docker-compose up -d

访问 http://localhost:3000

  • 用户名:admin

  • 密码:admin


🔗 3. 添加 TimescaleDB 数据源(PostgreSQL)

在 Grafana 中:

  1. 点击左侧 “齿轮” → “Data Sources”

  2. 点击 “Add data source”

  3. 选择 PostgreSQL

  4. 填写信息:

字段

Host

timescaledb:5432

Database

timescaledb

User

postgres

Password

your_password

SSL

Disable

TimescaleDB

✅ 选中(启用 Timescale 功能)

点击 “Save & Test”,如果成功,就可以开始建图表了。

⚠️⚠️⚠️注意TLS/SSL Mode要选择disable


📈 4. 添加仪表盘面板(示例)

🖥️添加面板

📌 面板 1:实时温湿度

查询 SQL:

SELECT
  time AS "time",
  temperature,
  humidity
FROM sensor_data
WHERE
  $__timeFilter(time)
  AND device_id = 'device_1'
ORDER BY time ASC

设置:

  • Format: Time series

  • Visualization: Time series

  • 多轴展示 temperature/humidity


📌 面板 2:每小时平均温湿度(聚合视图)

查询 SQL:

SELECT
  bucket AS "time",
  avg_temp,
  avg_humidity
FROM device_hourly_avg
WHERE
  $__timeFilter(bucket)
  AND device_id = 'device_1'
ORDER BY bucket ASC


⏰ 5. Grafana 自动刷新设置

  • 在面板右上角选择刷新频率(如每 10s、30s)

  • 配合 TimescaleDB 的连续聚合,显示稳定、性能好


📣 可选增强(你可以添加)

功能

实现建议

📦 多设备对比

使用 $device_id 变量动态生成面板

🚨 温度报警

使用 Alert 规则,当 avg_temp > 30 触发

🧱 看板布局

将实时 + 聚合图表拖入一个 Dashboard

📤 导出仪表盘 JSON

可导出/导入 dashboard 保存配置


✅ 结果:一个完整的 IoT 时序可视化平台!

你现在拥有了:

  • ⏱ 实时数据写入

  • 🧠 自动聚合 + 存储压缩

  • 🧹 数据老化与清理

  • 📊 Grafana 仪表盘展示

  • ⚙️ 全部通过 Docker Compose 自动搭建


后续,下面是一个完整预配置的 Grafana 仪表盘 JSON 文件,用于显示:

  • ✅ 实时温湿度曲线(sensor_data

  • ✅ 每小时平均温湿度聚合图(device_hourly_avg

你可以将这个 JSON 文件直接导入 Grafana,即可生成一个基础仪表盘,无需手动配置查询。


📦 仪表盘 JSON 内容(适用于 device_1

你可以复制以下内容保存为本地文件,例如:timescale_dashboard.json

{
  "id": null,
  "title": "IoT TimescaleDB Dashboard",
  "timezone": "browser",
  "panels": [
    {
      "type": "timeseries",
      "title": "📡 实时温湿度(device_1)",
      "targets": [
        {
          "format": "time_series",
          "rawSql": "SELECT time AS \"time\", temperature, humidity FROM sensor_data WHERE $__timeFilter(time) AND device_id = 'device_1' ORDER BY time",
          "refId": "A"
        }
      ],
      "fieldConfig": {
        "defaults": {
          "custom": {
            "drawStyle": "lines",
            "lineInterpolation": "smooth",
            "lineWidth": 2,
            "fillOpacity": 15
          }
        }
      },
      "gridPos": { "x": 0, "y": 0, "w": 24, "h": 9 }
    },
    {
      "type": "timeseries",
      "title": "📊 每小时平均温湿度(device_1)",
      "targets": [
        {
          "format": "time_series",
          "rawSql": "SELECT bucket AS \"time\", avg_temp, avg_humidity FROM device_hourly_avg WHERE $__timeFilter(bucket) AND device_id = 'device_1' ORDER BY bucket",
          "refId": "A"
        }
      ],
      "fieldConfig": {
        "defaults": {
          "custom": {
            "drawStyle": "lines",
            "lineInterpolation": "linear",
            "lineWidth": 2,
            "fillOpacity": 10
          }
        }
      },
      "gridPos": { "x": 0, "y": 10, "w": 24, "h": 9 }
    }
  ],
  "schemaVersion": 36,
  "version": 1,
  "refresh": "10s",
  "editable": true
}

📥 导入方法(Grafana UI)

  1. 打开 Grafana → 主页左侧栏点击“+” → 选择 Import

  2. 点击 “Upload JSON file” 或粘贴上述内容

  3. 选择你配置的 TimescaleDB 数据源

  4. 点击 “Import” 完成


🧠 提示

你可以:

  • 修改 SQL 中的 device_1 为变量 ${device_id},支持多设备切换

  • 增加 Alert 设置(例如温度 > 30°C 报警)

  • 使用“Legend”展示更清晰的设备名称

  • 打开“Auto-refresh” 让数据自动实时刷新


✅ 到此,你已经构建了一个可自动写入 + 聚合分析 + Grafana 可视化 + 数据清理 + 压缩优化的完整时序系统!


评论