如何在聚合查询中对标签进行分组到 Promscale

时间:2021-04-30 19:30:32

标签: sql grafana promql promscale

我正在从 Grafana 创建 SQL 查询到 Promscale。有指标和标签。我无法获得按某些标签进行分组的正确方法。我试过了:

SELECT time_bucket('$__interval', "time") AS "time",
       AVG("value") AS "used"
  FROM "disk_used_percent"
 WHERE $__timeFilter("time") AND
       "labels" ? ('host' == '$host_pg')
 GROUP BY 1, "labels" --> 'path'
 ORDER BY 1;

以及:

SELECT time_bucket('$__interval', "time") AS "time",
       AVG("value") AS "used"
  FROM "disk_used_percent"
 WHERE $__timeFilter("time") AND
       "labels" ? ('host' == '$host_pg')
 GROUP BY 1, "path_id"
 ORDER BY 1;

但似乎分组没有按预期工作。怎么了?相应的 PromQL 查询将是:

avg(disk_used_percent{host=~"$host_prom"}) by(path))

1 个答案:

答案 0 :(得分:1)

您可以使用 VAL("<label>_id") 分组:

SELECT time_bucket('$__interval', "time") AS "time",
       VAL("path_id") AS "path",
       AVG("value") AS "used"
  FROM "disk_used_percent"
 WHERE $__timeFilter("time") AND
       "labels" ? ('host' == '$host_pg')
 GROUP BY 1, 2
 ORDER BY 1;

旁注:还要避免在 Grafana 中使用 $__timeFilter("time") 模板宏,因为它会生成以下谓词:

"time" BETWEEN 'time range begin' AND 'time range end'

可能是 problematic某些情况下。