【问题标题】:Can I call an aggregate function over multiple dimensions in influxdb?我可以在 influxdb 中调用多个维度的聚合函数吗?
【发布时间】:2016-08-17 13:41:40
【问题描述】:

我在 Grafana 中有一个查询:

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 中完成我想要的?

【问题讨论】:

    标签: influxdb grafana


    【解决方案1】:

    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"
    

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多