如何在Grafana中合并多查询生成按resourceGroup统计的汇总表?
解决Grafana合并多查询NaN问题,生成resourceGroup分组汇总表
问题原因
当部分resourceGroup仅存在某类Azure资源时,直接合并查询结果会导致该资源组缺失其他资源类型的统计值,最终显示为NaN,影响汇总计算。
解决方案
方法一:修改PromQL查询,提前填充缺失值
通过PromQL的集合匹配,确保所有resourceGroup在每个查询中都有数值(无对应资源时填0),再进行合并计算。
- 先获取所有存在的resourceGroup集合:
all_resource_groups = count by (resourceGroup) ( union( azure_metric_postgresql_heartbeat{}, azure_metric_sqldatabase_heartbeat{}, azure_metric_mysql_heartbeat{} ) ) or vector(0)
- 对每个资源类型的查询做左连接填充:
# PostgreSQL统计(缺失resourceGroup填0) A_filled = all_resource_groups * 0 + on(resourceGroup) group_left() ( count by (resourceGroup) (azure_metric_postgresql_heartbeat{}) or vector(0) ) # SQL Database统计(缺失resourceGroup填0) B_filled = all_resource_groups * 0 + on(resourceGroup) group_left() ( count by (resourceGroup) (azure_metric_sqldatabase_heartbeat{}) or vector(0) ) # MySQL统计(缺失resourceGroup填0) C_filled = all_resource_groups * 0 + on(resourceGroup) group_left() ( count by (resourceGroup) (azure_metric_mysql_heartbeat{}) or vector(0) )
- 总资源数查询(可选,若需直接展示总和):
A_filled + B_filled + C_filled
将以上查询分别添加到Grafana,设置别名后即可在表格中展示各类型及总和数据,无NaN值。
方法二:利用Grafana Transform功能处理
无需修改PromQL,通过Grafana内置的Transform工具补全缺失值并计算总和:
- 步骤1:添加三个原始查询(A、B、C),分别设置别名为
PostgreSQL、SQL Database、MySQL - 步骤2:进入「Transform」标签页,添加第一个Transform:Merge,选择按
resourceGroup字段合并所有查询结果 - 步骤3:添加第二个Transform:Replace missing values,选择三个资源类型的字段,将缺失值替换为
0 - 步骤4:添加第三个Transform:Add field from calculation,选择「Binary operation」,依次计算三个字段的和,命名为
总资源数 - 步骤5:切换到Table面板,即可看到完整的分组统计表格,所有缺失值已被填充为0,总和计算准确
内容的提问来源于stack exchange,提问作者eojilaJA
相关产品推荐
相关产品推荐

