如何在单个 Grafana 面板中使用来自多个测量的数据?

How can I use data from more than one measurement in a single Grafana panel?

我正在尝试在 Grafana(版本 6.6.2 - 假设升级是最后的手段,但如果有必要,为了这个问题的目的)中创建一个仪表面板,它可以表示总可用内存的百分比由 Java 虚拟机 运行 宁我的进程使用。我 运行 遇到的问题如下:

我使用了 Springboot 执行器的指标并使用 Micrometer 将它们导入到 Influx 数据库中,但在此过程中,它已将我想在计算中使用的两个值存储到两个不同的测量值中。 jvm_memory_usedjvm_memory_max


我最初的想法是简单地在两个测量值上调用 SELECT 以获得我想要的值,然后除以“已用”/“最大值”并将该值乘以 100 得到要显示的百分比。不幸的是,当我尝试手动执行此操作时,我 运行 遇到了语法错误,而且我不确定是否可以使用 Grafana 的查询构建器来执行此操作。

我知道语法不正确,但我对 InfluxQL 不够熟悉,不知道如何正确构造此查询。这是我尝试过的:

(SELECT last("value")
    FROM "jvm_memory_used" 
    WHERE ("area" = 'heap') 
    AND $timeFilter 
    GROUP BY time($__interval) fill(null)
) /
(SELECT last("value")
    FROM "jvm_memory_max" 
    WHERE ("area" = 'heap') 
    AND $timeFilter 
    GROUP BY time($__interval) fill(null)
)

ANDGROUP BY 是 Grafana 查询构建器的默认值的结果,我不确定它们是否必要)

我假设我的括号和除法过程是非法的,但我不确定如何解决它。


如何从不同的表中划分这两个值?

编辑:我已经稍微进一步了,但似乎有一个新问题。我现在发送以下查询:

SELECT 100 * (last("used") / sum("max")) AS "percentUsed" 
    FROM(
        SELECT last("value") AS "used" 
            FROM "jvm_memory_used" 
            WHERE ("area" = 'heap')
            AND $timeFilter
    ),(
        SELECT last("value") AS "max" 
            FROM "jvm_memory_max" 
            WHERE ("area" = 'heap')
            AND $timeFilter
    )  
    GROUP BY time($__interval) fill(null)

我得到的结果是这样的:

我现在如何才能将此查询 return 只有一个带有数据的仪表,而不是两个带有空值的仪表?

我已经接受了一个适用于 Grafana 7 之后版本的答案。如果出现任何其他不涉及更新 Grafana 版本的答案,请一并提供!

我对 Influx 不是特别有经验,但由于您的问题是如何 use/combine Grafana 面板的两个测量(查询结果),我可以告诉您一种方法:

您可以使用 transformation. By that, you can keep two separate queries. With the transformation mode binary operation 您可以简单地将一个值除以另一个值。

在您的具体情况下,要以百分比显示结果,您可以使用 百分比 (0.0-1.0) 作为单位,您应该已经实现了您的目标。