一个面板里的多查询
面板编辑器里每条查询都有字母编号(A、B、C……),称为 RefID。多条查询的结果默认会一起进入可视化:
- 加查询:点查询编辑器下方的 + Query。
- 隐藏某条曲线:在图例里点击其名称,或对该查询设置不显示;具体入口随版本略有差异。
- 每条查询独立选数据源:A 查 Prometheus、B 查 MySQL 完全合法,这是「混合数据源」的基础。
表达式:查询之间做计算
数据源内部算不动的跨源运算,交给 Grafana 的 Expression(+ Query → Expression):
| 类型 | 作用 |
|---|---|
| Math | 用 $A、$B 引用其他查询结果做四则与聚合运算 |
| Reduce | 把一条曲线压缩成一个值 |
| Threshold | 按阈值判断输出 0 / 1,常用于状态色 |
| Time series | 从标量还原出曲线 |
「错误率 = 5xx ÷ 全部请求」的标准做法:
# 查询 A(Prometheus):分子
sum(rate(http_requests_total{status=~"5.."}[5m]))
# 查询 B(Prometheus):分母
sum(rate(http_requests_total[5m]))
# 表达式 C(Math):错误率百分比
100 * $A / $B
混合数据源速查
| 场景 | 做法 |
|---|---|
| 同源两条曲线对比 | A、B 两条查询用不同标签过滤 |
| 指标 ÷ 成本这类跨源计算 | A + B + Math 表达式 |
| 两条曲线粒度不同想相减 | 先各自 Format time series,再对齐时间列做 join |
注意: 跨源时两边都受仪表盘时间范围约束;某数据源保留期短就会出现断点,这不是查询写错。
常用 transformations
Transform 标签页里的数据变换,按列表从上到下执行:
| Transformation | 干什么 | 典型用途 |
|---|---|---|
| Merge | 直接拼接所有数据帧 | 把多查询结果塞进一张表 |
| Join data | 按指定字段对齐列 | 时间戳相同的多源数据并表 |
| Organize fields | 重命名、排序、隐藏列 | 整理表格观感 |
| Reduce | 每条序列聚合为单值 | 曲线变统计值面板 |
| Add field from calculation | 用已有列算新列 | 面板内做比率、差值 |
| Group by | 分组聚合 | SQL 式汇总表 |
| Filter fields by name | 按名字留列 | 砍掉多余列 |
| Format time series / table | 曲线与表互转 | join 前的整形 |
调试视图
数据不对时,先把可视化切成 Table(或 Inspect → Data)看数据帧原始形状:字段名对不对、值是不是预期、行数是否合理。再逐条关掉 transformation 定位。最后手段是 Inspect → Query 查看发给数据源的真实请求与响应耗时,用来区分「查询慢」还是「变换错」。
常见坑
- Join 出一堆空值:时间列精度或时区没对齐,先统一格式再 join。
- Math 表达式结果为空:
$A引用的查询必须有返回数据,逐条到 inspector 里核对。 - 变换顺序一换结果全变:
Reduce放在Organize前后效果完全不同。