You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grafana单表格中合并两个InfluxDB Flux查询结果?

解决Grafana对接InfluxDB时多Flux查询结果合并为单表格的问题

给你两个靠谱的解决办法,直接搞定把两个指标合并成三列表格的需求:

方法一:在Flux查询层面直接合并(推荐)

不用分开写两个查询,直接在Flux里一次性获取两个字段并转成列,效率更高。替换原来的两个查询为下面这段代码:

from(bucket: "telegraf")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mem")
  // 同时筛选出已用内存(used)和百分比(used_percent)两个字段
  |> filter(fn: (r) => r["_field"] == "used" or r["_field"] == "used_percent")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  // 把_field的不同值转成单独列,host和_time作为行标识
  |> pivot(rowKey: ["_time", "host"], columnKey: ["_field"], valueColumn: "_value")
  // 给列重命名成你要的中文名称
  |> rename(columns: {used: "已用内存(GB)", used_percent: "已用内存百分比"})
  |> yield(name: "mem_stats")

这段代码的逻辑是:

  1. 一次性拉取两个指标的数据
  2. 聚合后用pivot函数把原来的行数据(每个host+时间点对应一条指标)转成列数据(每个host+时间点对应一行,包含两个指标列)
  3. 最后重命名列名,直接在Grafana表格里就能得到你要的三列结构。

方法二:用Grafana的转换功能处理现有查询

如果不想改查询,保留原来的两个Flux查询,通过Grafana的面板转换来合并:

  1. 把两个查询都添加到Grafana面板的数据源中
  2. 添加Merge转换:把两个查询的结果合并成一个数据集(此时数据还是行追加的形式,每个host对应两行数据,分别是used和used_percent)
  3. 添加Pivot转换:
    • Row fields:勾选host和_time(如果不需要按时间维度,只勾选host即可)
    • Column field:选择_field
    • Value field:选择_value
  4. 添加Organize fields转换:
    • 把列名used改成已用内存(GB),used_percent改成已用内存百分比
    • 调整列的顺序,把host放在第一列

之前你用Merge、Organize没成功,大概率是漏了关键的Pivot步骤——只有通过Pivot才能把不同的_field值转成单独的列,而不是行追加。

内容的提问来源于stack exchange,提问作者Falke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:52:29