GreptimeDB与Grafana联动异常:查询结果自动求和需拆分cpu/mem指标
GreptimeDB + Grafana 时间序列面板多指标展示问题解决
环境组件
- Grafana 9.5.15
- GreptimeDB 最新版本
- 通过 Prometheus 插件连接
问题详情
GreptimeDB 表结构
CREATE TABLE IF NOT EXISTS "system" ( "host" STRING NULL, "ts" TIMESTAMP(3) NOT NULL, "cpu" DOUBLE NULL, "mem" DOUBLE NULL, TIME INDEX ("ts"), PRIMARY KEY ("host") )
现有数据
Time cpu mem 12345 2000 8000 45467 2000 10000
当前异常表现
在 Grafana 中执行查询语句 system 后,所有数值字段被自动求和,时间序列面板仅显示一条汇总线,输出结果:
Time Value 12345 10000 45467 12000
预期效果
分别展示 cpu 和 mem 两个指标的原始数据,时间序列面板呈现两条独立曲线,输出结果:
Time cpu mem 12345 2000 8000 45467 2000 10000
解决方案
由于使用 Prometheus 插件连接 GreptimeDB,直接查询表名会默认对所有数值字段执行聚合求和。要实现多指标独立展示,可通过以下方式处理:
方法1:拆分独立查询
创建两个单独的查询语句,分别指定要获取的指标:
- 查询 cpu 数据:
system{__name__="cpu"} - 查询 mem 数据:
system{__name__="mem"}
若 Grafana 支持直接执行 GreptimeDB SQL,也可使用:
- 查询 cpu:
SELECT ts, cpu FROM system - 查询 mem:
SELECT ts, mem FROM system
方法2:单查询返回多标签序列
通过 SQL 语句将不同指标转换为带标签的格式,让 Grafana 自动区分序列:
SELECT ts, cpu AS value, 'cpu' AS metric FROM system UNION ALL SELECT ts, mem AS value, 'mem' AS metric FROM system
查询结果会携带 metric 标签,Grafana 时间序列面板会基于该标签生成两条独立曲线。
方法3:调整面板聚合设置
检查 Grafana 时间序列面板的数据处理设置,确保未开启强制聚合规则,将格式设置为 Time series,保证原始字段数据被正确解析。
内容的提问来源于stack exchange,提问作者Murasame
相关产品推荐
相关产品推荐

