我在Grafana有一个查询:
SELECT mean(value) FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host", "instance"目前,这个图表显示了在给定的时间段内,一个兔子of队列中的平均消息数,显示了每个主机的每个队列的单独图。
我想在本质上做同样的事情,但结果是每个主机只有一个图,将所有的队列加在一起。这意味着取指定时间段内所有消息计数的平均值(保持不同的instances、hosts和时间间隔分开),然后将它们相加(这一次只保持不同的hosts和时间间隔分开)。
问题是,像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"但这两个都不是有效的语法。
本质上,我首先尝试在给定的时间段内对包含特定主机上的一个特定队列的聚合进行工作,然后尝试在同一时间段内处理由每个主机的计算结果形成的聚合。
是否有一种方法可以实现我想要的--影响数据库或grafana?
发布于 2016-08-22 16:02:27
有一种方法可以用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"https://stackoverflow.com/questions/38998362
复制相似问题