首页 文章

我可以在Influxdb中调用多个维度的聚合函数吗?

提问于
浏览
1

我在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 和时间间隔分开) .

问题是,像 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中完成我想要的东西?

1 回答

  • 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"
    

相关问题