我正在为我的家庭网络调试 Grafana 仪表板,但在绘制网络吞吐量图表时遇到了一些问题。我使用 SNMP(通过 Telegraf)从 EdgeRouter Lite 收集输入/输出八位字节形式的数据,并将其存储在 InfluxDB 中。
关于数据的一些背景信息:我将 SNPM OID 映射IF-MIB::ifInOctets
到"in"
InfluxDB 中的字段,并ifOutOctets
映射到"out"
。
我的图表如下所示:图形和查询配置。您可以看到欧洲中部时间 13:03 左右出现奇怪的负峰值,以及我用于绘制图表的查询。原始查询如下所示:
SELECT derivative(mean("in"), 1s) * 8 FROM "interfaces" WHERE "agent_host" = 'erl-0' AND "interface" = 'eth0' AND $timeFilter GROUP BY time($interval) fill(null)
InfluxDB 的原始数据如下所示:
time agent_host interface alias in out
1473678126000000000 erl-0 eth0 WAN 3205308591 319785590
1473678136000000000 erl-0 eth0 WAN 3321553117 353290530
1473678147000000000 erl-0 eth0 WAN 3445036903 392119701
1473678156000000000 erl-0 eth0 WAN 3581558041 425580762
1473678166000000000 erl-0 eth0 WAN 3672208729 443676764
1473678176000000000 erl-0 eth0 WAN 3788670837 466220844
1473678187000000000 erl-0 eth0 WAN 3919232023 492503082
1473678196000000000 erl-0 eth0 WAN 4049747221 519032038
1473678206000000000 erl-0 eth0 WAN 4175388518 542356489
1473678216000000000 erl-0 eth0 WAN 4267330205 555825188
1473678226000000000 erl-0 eth0 WAN 92739158 574152376
1473678236000000000 erl-0 eth0 WAN 214850117 592841397
1473678247000000000 erl-0 eth0 WAN 368351063 615091793
1473678257000000000 erl-0 eth0 WAN 471647935 629344345
1473678268000000000 erl-0 eth0 WAN 561029600 640088389
1473678295000000000 erl-0 eth0 WAN 853931068 683745372
我对制图和数学一窍不通,所以我很难理解这个错误发生在哪里——是源数据奇怪,还是计算错误?我该怎么做才能修复它?
mzhaase 的答案帮助我理解了这个问题。我还发现 InfluxDB 有一个non_negative_derivative()
函数,可以给我想要的结果。
答案1
您正在计算导数。因此,您实际上获得的不是吞吐量,而是吞吐量的变化,就像导数那样。您可以看到,在出现负峰值之前,您有 4 或 5 个数据点在 100 MBit 左右 - 这意味着在出现峰值之前,您的吞吐量从 0 缓慢上升到 500 MBit 左右。因此,当它降至零时,您就会看到负 500 MBit 的变化。