如何在图表上将95%显示为一条线

时间:2020-04-06 10:19:49

标签: grafana influxdb

首先,对数据有一些了解。
我有一个带有InfluxDB数据库,autobandwidth每分钟都有从snmp收集的接口统计信息填充,但是这里感兴趣的是标签hostsnmp_id和值ifInOctetsifOutOctets
然后,我有一个连续查询,该查询使用non_negative_derivative填充导数以更改字节/秒的字节,并填充autobandwidth_deriv

我使用Grafana来显示数据,并使用以下查询:

SELECT
  mean("non_negative_derivative_ifInOctets") *8 AS "in",
  mean("non_negative_derivative_ifOutOctets") *8 AS "out"
FROM "autobandwidth_deriv"
WHERE ("host" =~ /^$host$/ AND "snmp_id" =~ /^$snmp_id$/) AND $timeFilter
GROUP BY time($__interval), "host", "snmp_id"

它精美地显示了数据。

现在,我还有另一个查询来获取95%的值:

SELECT
  percentile("non_negative_derivative_ifInOctets", 95) *8 AS "in 95%",
  percentile("non_negative_derivative_ifOutOctets", 95) *8 AS "out 95%"
FROM "autobandwidth_deriv"
WHERE ("host" =~ /^$host$/ AND "snmp_id" =~ /^$snmp_id$/) AND $timeFilter
GROUP "host", "snmp_id"

这使我获得了图例中95%的值。

现在,我想要的是获得95%处的直线,具有视觉辅助功能,并能够看到交通何时到达上方。
由于influxdb查询仅返回一个时间值,因此不会显示在图形上。
另外,由于我只有一个时间值,因此使用fill()的任何值都无济于事,所以没有什么可填充的。出于相同的原因,在grafana的图形设置中也不会为连接设置空值。

经过几天的阅读,我发现所有关于百分位数和图形的信息,最终我要做的就是使用这样的子选择:

SELECT
  MEAN("in 95%") as "in 95%", MEAN("out 95%") as "out 95%"
FROM (
  SELECT
    percentile("non_negative_derivative_ifInOctets", 95) *8 AS "in 95%",
    percentile("non_negative_derivative_ifOutOctets", 95) *8 AS "out 95%"
  FROM "autobandwidth_deriv"
  WHERE ("host" =~ /^$host$/ AND "snmp_id" =~ /^$snmp_id$/) AND $timeFilter
  GROUP BY time(600d), "host", "snmp_id"
)
GROUP BY time($__interval), "host", "snmp_id" fill(previous)

我现在有了我想要的行...除了当我的时间序列越过time(600d)边界时,我有两个值。

我需要在子选择中使用GROUP BY time(600d),否则influxdb变得很聪明,并且我希望所有时间值都出自子选择,而最终我得到的数据中没有进行百分位数计算...

所以,这不是解决方案,我不知道下一步该怎么做。
也许我需要在Grafana中做点什么,但我不知道该怎么办...

0 个答案:

没有答案