🎆实现效果如下

📊 Grafana 接入 TimescaleDB 的完整流程(含实时+聚合展示)
内容包括:
Grafana 容器配置
Grafana 数据源连接 PostgreSQL(TimescaleDB)
两个典型面板:
✅ 实时温湿度数据(折线图)
✅ 每小时平均值(聚合视图)
🧩 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用户名:
admin密码:
admin
🔗 3. 添加 TimescaleDB 数据源(PostgreSQL)
在 Grafana 中:
点击左侧 “齿轮” → “Data Sources”
点击 “Add data source”
选择 PostgreSQL
填写信息:
点击 “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 seriesVisualization:
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 的连续聚合,显示稳定、性能好

📣 可选增强(你可以添加)
✅ 结果:一个完整的 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)
打开 Grafana → 主页左侧栏点击“+” → 选择 Import
点击 “Upload JSON file” 或粘贴上述内容
选择你配置的 TimescaleDB 数据源
点击 “Import” 完成
🧠 提示
你可以:
修改 SQL 中的
device_1为变量${device_id},支持多设备切换增加 Alert 设置(例如温度 > 30°C 报警)
使用“Legend”展示更清晰的设备名称
打开“Auto-refresh” 让数据自动实时刷新
✅ 到此,你已经构建了一个可自动写入 + 聚合分析 + Grafana 可视化 + 数据清理 + 压缩优化的完整时序系统!