使用分组数据{gra

时间:2018-05-16 17:19:01

标签: influxdb grafana

我使用Influxdb来存储一些服务指标。这些是简单的指标,例如读取字节或活动连接。然后,使用grafana,我会在此基础上构建一些可视化。

显示某些内容'读取字节'很简单,它基本上是按时间间隔对值进行求和。

SELECT sum("value") FROM "bytesReceived" WHERE $timeFilter GROUP BY time($__interval) fill(0)

关于“有效连接”'我在搞清楚方面遇到了一些麻烦。这些是连接到服务的tcp套接字,其中测量是连接套接字的数量;每当套接字连接或断开连接时都会更新。

如果我只有一个服务实例,这很容易,我会做像

这样的事情
SELECT last("value") FROM "activeConnections" WHERE $timeFilter GROUP BY time($__interval) fill(0)

事情是,有多个服务实例,它们是动态创建的。测量使用附加标记' host'编写,其中填充了运行时服务的id。

所以,让我们进入数据点。

select * from activeConnections where time > '2018-05-16T16:00:00Z' and time < '2018-05-16T16:10:00Z'

这会吐出像

这样的东西
time                host         value
----                ----         -----
1526486436041433600 58e5bd04a313 5
1526486438158741000 58e5bd04a313 4
1526486438712713000 58e5bd04a313 3
1526486811218129000 29b39780fd7b 4

你可以注意到,我们最终在一台主机上有3个连接,在另一台主机上有4个连接。手头的问题是......显示数据整体合并,例如最后一行应为7。

我尝试按主机分组数据

select last(value) from activeConnections where time > '2018-05-16T16:00:00Z' and time < '2018-05-16T16:10:00Z' group by host

给出了每个组的最后一个值

name: activeConnections
tags: host=29b39780fd7b
time                last
----                ----
1526486811218129000 4

name: activeConnections
tags: host=58e5bd04a313
time                last
----                ----
1526486706993942700 3

还尝试使用子查询

select * from ( select last(value) from activeConnections where time > '2018-05-16T16:00:00Z' and time < '2018-05-16T16:10:00Z' group by host )

但是我遇到了同样的问题,我不知道如何用时间间隔很好地为grafana分组。

有什么关心评论和帮助吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

确定,

我似乎找到了解决方案。遗憾的是,Grafana不支持子查询,因此需要使用原始视图手动插入查询。问题是开放here

所以,我需要的是一种将所有主机值分组到一个绘图线中的方法。这可以通过以下查询来实现:

SELECT sum("value") FROM (SELECT last("value") as "value" FROM "activeConnections" WHERE $timeFilter GROUP BY time($__interval), "host") GROUP BY time($__interval) fill(previous)

我之前很接近,但没有注意到在内部选择中,如果你没有给结果选择命名,默认情况下它会显示为“last”。所以我试图总结“价值”,但该字段在子查询中不存在。

希望这有助于某人。谢谢Yuri,感谢您的评论。它指出了我正确的方向。