InfluxDB 1.7.2-一段时间内排名前X

时间:2019-02-17 17:19:40

标签: influxdb

我是InfluxDB的新手。我正在用它来存储ntopng时间序列数据。

ntopng编写了一个名为asn:traffic的度量,该度量存储了ASN发送和接收的字节数。

> show tag keys from "asn:traffic"
name: asn:traffic
tagKey
------
asn
ifid
> show field keys from "asn:traffic"
name: asn:traffic
fieldKey   fieldType
--------   ---------
bytes_rcvd float
bytes_sent float
>

我可以运行查询以查看特定ASN的数据速率(以bps为单位):

> SELECT non_negative_derivative(mean("bytes_rcvd"), 1s) * 8 FROM "asn:traffic" WHERE "asn" = '2906' AND time >= now() - 12h GROUP BY time(30s) fill(none)
name: asn:traffic
time                non_negative_derivative
----                -----------------------
1550294640000000000 30383200
1550294700000000000 35639600
...
...
...
>

但是,我想做的是创建一个查询,该查询可用于按数据速率返回前N个ASN,并将其绘制在Grafana图上。类似于this的示例,它使用的是ELK。

我已经在这里和其他地方的帖子中尝试了一些变体,但是我一直无法获得想要的东西。例如,我认为该查询使我更接近想要的位置,但是asn中没有值:

> select top(bps,asn,10) from (SELECT non_negative_derivative(mean(bytes_rcvd), 1s) * 8 as bps FROM "asn:traffic" WHERE time >= now() - 12h GROUP BY time(30s) fill(none))
name: asn:traffic
time                top                asn
----                ---                ---
1550299860000000000 853572800
1550301660000000000 1197327200
1550301720000000000 1666883866.6666667
1550310780000000000 674889600
1550329320000000000 20979431866.666668
1550332740000000000 707015600
1550335920000000000 2066646533.3333333
1550336820000000000 618554933.3333334
1550339280000000000 669084933.3333334
1550340300000000000 704147333.3333334
>

然后认为子查询可能还需要选择asn,但是这会产生有关混合查询的错误:

> select top(bps,asn,10) from (SELECT asn, non_negative_derivative(mean(bytes_rcvd), 1s) * 8 as bps FROM "asn:traffic" WHERE time >= now() - 12h GROUP BY time(30s) fill(none))
ERR: mixing aggregate and non-aggregate queries is not supported
>

有人对解决方案有任何想法吗?

编辑1

根据George Shuklin的建议,将查询修改为在asn中包含GROUP BY会在CLI输出中显示ASN,但会显示doesn't translate in Grafana。我期望一个堆叠图,其中堆叠图的每一层都是结果中排名前10的之一。

1 个答案:

答案 0 :(得分:0)

尝试将ASN用作标签,然后再使用group by time(30s), 'asn',该标签将在外部查询中可用。