InfluxDB 按字段分组(不是标签)并获得前 10 名

InfluxDB Group By Field (Not Tag) and Get Top 10

我对 influxdb 很陌生。

我有这样一个数据集; (每个row/point是一个连接)

time                           dest_ip         source_ip    
----                           -------         ---------  
2018-08-10T11:42:38.848793088Z 211.158.223.252 10.10.10.227 
2018-08-10T11:42:38.87115392Z  211.158.223.252 10.10.10.59 
2018-08-10T11:42:38.875289088Z 244.181.55.139  10.10.10.59 
2018-08-10T11:42:38.880222208Z 138.63.15.221   10.10.10.59  
2018-08-10T11:42:38.886027008Z 229.108.28.201  10.10.10.227   
2018-08-10T11:42:38.892329728Z 229.108.28.201  10.10.10.181 
2018-08-10T11:42:38.896943104Z 229.108.28.201  10.10.10.59 
2018-08-10T11:42:38.904005376Z 22.202.67.174   10.10.10.227
2018-08-10T11:42:38.908818688Z 138.63.15.221   10.10.10.181  
2018-08-10T11:42:38.913192192Z 138.63.15.221   10.10.10.181 

dest_ip 和 source_ip 是字段,不是标签。

  1. 是否可以按 dest_ip 所有连接记录以某种方式分组并获得计数最高的 10 条记录?

  2. 是否可以按 dest_ip 和 source_ip 分组并获得前 10 条记录的计数?

  3. 或根据连接计数获得前 10 个 source_ip 到 dest_ip 关系的任何其他解决方案?

目前InfluxDB仅支持GROUP BY子句中的标签和时间间隔;正如您所见的 group by 子句的语法(有关更多信息,请参阅 InfluxDB documention):

SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(<time_interval>),[tag_key]

但是如果您插入 dest_ipsource_ip 作为标签而不是字段,您可以使用 InfluxQL 查询语言实现您提到的所有愿望。