如何在单个 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_used
和 jvm_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)
)
(AND
和 GROUP 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) 作为单位,您应该已经实现了您的目标。
我正在尝试在 Grafana(版本 6.6.2 - 假设升级是最后的手段,但如果有必要,为了这个问题的目的)中创建一个仪表面板,它可以表示总可用内存的百分比由 Java 虚拟机 运行 宁我的进程使用。我 运行 遇到的问题如下:
我使用了 Springboot 执行器的指标并使用 Micrometer 将它们导入到 Influx 数据库中,但在此过程中,它已将我想在计算中使用的两个值存储到两个不同的测量值中。 jvm_memory_used
和 jvm_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)
)
(AND
和 GROUP 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) 作为单位,您应该已经实现了您的目标。