2016-08-17 100 views
1

我在Grafana的查询:我可以在influxdb的多个维度上调用一个聚合函数吗?

SELECT mean(value) FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host", "instance" 

目前这个图形消息的平均数在RabbitMQ的队列在给定的时间段,显示了每个主机每个队列独立的曲线图。

我想基本上做同样的事情,但导致每个主机只有一个图形将所有队列相加。这意味着在指定的时间段内保持所有消息计数的平均值(保持不同的instances,hosts和时间间隔分开),然后将它们相加在一起(这次只保持不同的hosts和时间间隔分开)。

问题是,像meansum这样的每个集合函数只会影响整个查询,并且似乎没有办法将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中完成我想要的?

回答

2

有一种方法可以与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" 
相关问题