Grafana v6.2.5 Elasticsearch查询求和及饼图展示问题咨询
针对Grafana v6.2.5的求和与饼图显示问题解决方案
针对你提到的需求——要么用查询B/C分别对查询A的两个字段求和,要么退而求分组后展示itemNumberDone总和,同时还要筛选每个分组中timestamp最大的条目、解决饼图显示多个分项的问题,我结合Grafana 6.2.5的特性给你梳理可行方案:
一、尝试用查询B/C分别聚合查询A的两个字段
首先得明确你的数据源类型(比如InfluxDB、Prometheus、SQL类数据库),这里以最常用的时序/SQL数据源为例,给出通用思路:
1. 先筛选每个分组的最新条目
不管后续怎么聚合,第一步都要确保拿到每个分组里timestamp最大的那条数据。以SQL类数据库(比如PostgreSQL)或InfluxDB为例,你可以用子查询实现:
-- 以SQL为例,group_field是你的分组字段 SELECT a.* FROM your_table a INNER JOIN ( SELECT group_field, MAX(timestamp) AS max_ts FROM your_table WHERE $timeFilter GROUP BY group_field ) b ON a.group_field = b.group_field AND a.timestamp = b.max_ts
这段查询会返回每个分组的最新数据条目,作为后续聚合的基础。
2. 按查询B/C的条件分别求和
假设查询B是针对itemNumberDone的筛选条件(比如特定标签、状态),查询C是针对itemNumberInError的筛选条件,你可以基于上面的子查询,写两个独立的聚合查询:
- 针对
itemNumberDone的求和(应用查询B的条件):SELECT SUM(itemNumberDone) AS "Total Done" FROM ( -- 上面的子查询内容 ) filtered_data WHERE [查询B的筛选条件] -- 比如 status = 'completed' - 针对
itemNumberInError的求和(应用查询C的条件):SELECT SUM(itemNumberInError) AS "Total Errors" FROM ( -- 上面的子查询内容 ) filtered_data WHERE [查询C的筛选条件] -- 比如 status = 'failed'
把这两个查询添加到饼图面板中,就能分别展示两个维度的总和。如果你的查询B/C是独立的数据集关联,那在Grafana 6.2.5里会比较受限——旧版本的跨查询关联能力较弱,可能需要在数据源层面做JOIN,或者把查询B/C的结果存为变量再引用,但操作起来比较繁琐。
二、退而求其次:分组后展示itemNumberDone的总和(解决饼图多分项问题)
如果第一种需求无法实现,要让饼图显示整体总和而非多个分组分项,你需要调整查询的聚合逻辑:
- 先筛选最新条目:还是用上面的子查询,拿到每个分组的最新数据。
- 对所有分组的
itemNumberDone求和:注意这里是求所有筛选后数据的总和,而非每个分组单独的值,示例查询:
这个查询只会返回一行数据,也就是整体总和。SELECT SUM(itemNumberDone) AS "Total Completed" FROM ( -- 筛选每个分组最新条目的子查询 ) filtered_data - 调整饼图面板配置:
- 进入面板的
Options标签,确认数值字段选择的是求和后的Total Completed; - 检查
Legend设置,关闭按分组字段生成图例的选项,避免饼图被拆分成多个小项; - 如果需要对比其他指标(比如错误总数),可以再添加对应的求和查询,饼图会自动把多个总和项作为不同的分片展示。
- 进入面板的
内容的提问来源于stack exchange,提问作者SophiP
相关产品推荐
相关产品推荐

