如何计算网络设备的 95 百分位带宽使用率?

如何计算网络设备的 95 百分位带宽使用率?

我的提供商使用 95 百分位法来计费。我原则上知道它是什么(进行测量,丢弃前 5%,并使用剩余的最高值作为结果)。

这里的问题是使用什么作为基础数据!

据我了解,我目前的提供商每 5 分钟记录一次流量。不是每 5 分钟一次的测量,而是 5 分钟的平均值!

间隔是否标准化或至少是行业内事实上的标准?在这些间隔内使用平均带宽(等于数据除以时间)是否也是标准,还是每 5 分钟取 5 秒的平均值?

我的第二个问题是:是否有像 vnstat 这样的应用程序可以用来自己测量 95 百分位数?

答案1

我知道的标准是简单地查看每 5 分钟的网络计数器(传输的数据包/字节)。就这么简单 - 这给你平均值,因为你不知道它在 5 分钟内是如何分布的。

基本上每 5 分钟测量一次来自网络设备的字节/数据包发送/接收计数器。这是 100%。丢弃 5% 的最高数字,这是 95% 的百分位数。

测量自己 - 是的,但获得完全相同的数字很难(需要在同一时间测量完全相同的元素)。

答案2

您的设置中是否有任何路由器/防火墙设备,或者您只是从 Linux 主机连接?(这会对您的监控选项产生影响)

另外,您现在的承诺利率与可突发利率是多少?

您的提供商应该为您提供一个运行图(通常是一些 RRDtool 衍生产品和/或 MRTG),显示您在整个计费周期内的带宽利用率。他们可以从您的上行链路端口进行测量。

我用观景台在我这边,但那是为了更大的安装。我将点击我的边缘设备的外部接口并在那里监控 95th-Percentile。该工具旨在供服务提供商使用,因此计费模板都存在。

就像是:

在此处输入图片描述

我每个月都会从我的一个供应商那里收到以下明细数据(带有预测)...

--------------------------------
Transit : Bandwidth Usage Breakdown
--------------------------------
Last Month Usage Breakdown:

       From: Tue Jan  1 00:00:00 CST 2013
         To: Fri Feb  1 00:00:00 CST 2013

  GBytes     IN =   184.661
  GBytes    OUT =   944.873
          -----------------
          TOTAL =  1129.534

  95th Percentile:  9.866 Mbps

--------------------------------
Month-To-Date Usage Breakdown:

       From: Fri Feb  1 00:00:00 CST 2013
         To: Mon Feb 11 07:33:37 CST 2013

  GBytes     IN =    60.902
  GBytes    OUT =   287.265
          -----------------
          TOTAL =   348.168

  95th Percentile:  9.906 Mbps

--------------------------------
Current Month Projection Usage Breakdown:

       From: Fri Feb  1 00:00:00 CST 2013
         To: Fri Mar  1 00:00:00 CST 2013

  GBytes     IN =    60.902
  GBytes    OUT =   287.265
          -----------------
          TOTAL =   348.168

  95th Percentile:  9.412 Mbps

--------------------------------

答案3

如果您使用的是 Linux,ifconfig请给您一些提示。运行脚本以 5 分钟为间隔获取数据,然后手动截取前 5% 的数据即可。

在微观层面上,您可以检查ethtool -S ethX从哪里获得详细的数据包统计信息。同样,每隔 5 分钟放入一个脚本,计算一两天,然后对其进行一些测量。在主命令的每次迭代后插入 date 命令,以估计您何时测量以及提供商何时测量。

答案4

这应该会给你 Linux 中接口的第 95 个百分位数:

=======95th.sh=====

#!/bin/bash

IFACE=${1-eth0}
INTERVAL=${2-10}
# Generate environment vars RX1,RX2 and TX1,TX2 which are 10 seconds apart:
eval $(
    ifconfig  $IFACE | grep '[RT]X packets' | awk '{print $1" "$5}' | sed 's/ /1=/' 
    sleep $INTERVAL
    ifconfig  $IFACE | grep '[RT]X packets' | awk '{print $1" "$5}' | sed 's/ /2=/') 

# Convert to kbit/sec:
let "RX=($RX2-$RX1)*8/$INTERVAL / 1000"
let "TX=($TX2-$TX1)*8/$INTERVAL / 1000"

# BX is the max of both:
let "BX = $TX > RX ? $TX : $RX"

echo $BX RX=$RX TX=$TX BX=$BX $(date '+%F %H:%M:%S')

==== /etc/crontab ====

*/5  *  *  *  * root /usr/local/bin/95th.sh eth0 >> /var/log/95th-percent.log

==== 从您的日志中以 kbits 为单位找到第 95 个百分位条目 ====

DATE=2019-06
PERCENTILE=95
grep $DATE /var/log/95th-percent.log | sort -nr | head -n $(( $( grep -c $DATE /var/log/95th-percent.log ) * (100-$PERCENTILE) / 100 )) | tail -1

相关内容