使用Influxdb查询获取最大值的总和

时间:2019-01-17 02:42:05

标签: influxdb

我有一项服务,可以监视每个主机的用户数量。

我需要一个查询,该查询每5分钟获取每台主机的最大用户数量,然后将它们全部求和,即它返回我在系统中跨主机的用户数量。

我需要将结果绘制为折线图以查看演变情况。

使用以下查询时,每隔5分钟可以看到每个主机中的最大用户数:

SELECT max("users.connected") AS "users" 
FROM "telegraf"."autogen"."customer" 
WHERE time > now() - 12h 
GROUP BY time(5m), "host" 
FILL(0)

图表如下:enter image description here

但是,当我尝试使用以下子查询对这些系列进行分组时,它将返回一系列零,并且当只有一个主机的数据可用时(即其余主机返回零用户),就会返回该主机的指标。

SELECT sum("users") 
FROM 
   (SELECT max("users.connected") AS "users" 
    FROM "telegraf"."autogen"."customer" 
    WHERE time > now() - 12h 
    GROUP BY time(5m), "host" 
    FILL(0)) 
GROUP BY time(5m)

enter image description here

是否可以实现这种聚合?我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我发现问题出在fill(0)语句上。 当我将其替换为fill(null)时,它可以正常工作。

SELECT sum("users") 
FROM 
   (SELECT max("users.connected") AS "users" 
    FROM "telegraf"."autogen"."customer" 
    WHERE time > now() - 12h 
    GROUP BY time(5m), "host" 
    FILL(null)) 
GROUP BY time(5m)

此外,当在datetime选择器中选择一个绝对日期时,我们需要按照@Yuri Lachin的建议,将WHERE子句添加到外部查询中。在这种情况下,它将添加WHERE time > :dashboardTime: AND time < :upperDashboardTime:,因此整个查询最终变为:

SELECT sum("users") 
FROM 
   (SELECT max("users.connected") AS "users" 
    FROM "telegraf"."autogen"."customer" 
    WHERE time > :dashboardTime: AND time < :upperDashboardTime:
    GROUP BY time(5m), "host" 
    FILL(null)) 
WHERE time > :dashboardTime: AND time < :upperDashboardTime:
GROUP BY time(5m)