我可以在 influxdb 中调用多个维度的聚合函数吗?
Can I call an aggregate function over multiple dimensions in influxdb?
我在 Grafana 中有一个查询:
SELECT mean(value) FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host", "instance"
目前,此图表显示给定时间段内 rabbitmq 队列中的平均消息数,显示每个主机每个队列的单独图表。
我基本上想做同样的事情,但结果是每个主机只有一个图表,将所有队列加在一起。这意味着取指定时间段内所有消息计数的平均值(保持不同的 instance
s、host
s 和时间间隔分开),然后将它们相加(这次只保持不同的 host
s 和时间间隔分开)。
问题是,每个像 mean
或 sum
这样的聚合函数只会影响整个查询,而且似乎没有办法将 GROUP BY
语句应用到只有一个聚合函数。
如果可能的话,我会这样做:
SELECT sum(mean(value) GROUP BY "instance") FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host"
或者这样:
SELECT sum(value) FROM (SELECT mean(value) FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host", "instance") GROUP BY time($interval), "host"
但这两个都不是有效语法。
本质上,我试图首先在给定时间段内处理包含一个特定主机上的一个特定队列的聚合,然后尝试处理由每个主机的计算结果组成的聚合同一时间段。
有没有办法在 influxdb 或 grafana 中完成我想要的?
有一种方法可以使用 InfluxDB 执行此操作,但它需要两个步骤。
首先,创建计算平均值的连续查询
CREATE CONTINUOUS QUERY <name> ON <database>
BEGIN
SELECT mean(value) AS value
INTO "mean_queue_value" FROM "queues_value"
WHERE "host" =~ /<host>/
AND "type" = 'rabbitmq_messages'
GROUP BY time(<interval>), "host"
END
然后简单地发出一个查询
SELECT sum(value) FROM "mean_queue_value" GROUP BY time(<interval>), "host"
我在 Grafana 中有一个查询:
SELECT mean(value) FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host", "instance"
目前,此图表显示给定时间段内 rabbitmq 队列中的平均消息数,显示每个主机每个队列的单独图表。
我基本上想做同样的事情,但结果是每个主机只有一个图表,将所有队列加在一起。这意味着取指定时间段内所有消息计数的平均值(保持不同的 instance
s、host
s 和时间间隔分开),然后将它们相加(这次只保持不同的 host
s 和时间间隔分开)。
问题是,每个像 mean
或 sum
这样的聚合函数只会影响整个查询,而且似乎没有办法将 GROUP BY
语句应用到只有一个聚合函数。
如果可能的话,我会这样做:
SELECT sum(mean(value) GROUP BY "instance") FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host"
或者这样:
SELECT sum(value) FROM (SELECT mean(value) FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host", "instance") GROUP BY time($interval), "host"
但这两个都不是有效语法。
本质上,我试图首先在给定时间段内处理包含一个特定主机上的一个特定队列的聚合,然后尝试处理由每个主机的计算结果组成的聚合同一时间段。
有没有办法在 influxdb 或 grafana 中完成我想要的?
有一种方法可以使用 InfluxDB 执行此操作,但它需要两个步骤。
首先,创建计算平均值的连续查询
CREATE CONTINUOUS QUERY <name> ON <database>
BEGIN
SELECT mean(value) AS value
INTO "mean_queue_value" FROM "queues_value"
WHERE "host" =~ /<host>/
AND "type" = 'rabbitmq_messages'
GROUP BY time(<interval>), "host"
END
然后简单地发出一个查询
SELECT sum(value) FROM "mean_queue_value" GROUP BY time(<interval>), "host"