赞
踩
阿里云没有拉取ECS具体使用流量的方法,折腾了几天。摸清楚了他的算法,计算出来的值和阿里云流量具体使用差不多
1.拉取流量图数据,使用API : DescribeInstanceMonitorData, 使用 InternetTX (发送流量)
2.时间间隔值设置为600s,即为10分钟。
3.将拉去到的点数据,使用梯形面积公式,相邻的两个点计算面积。最后加到一起
4.因为流量图数据的单位是 kbit/s,转换为MB即将得到的数据 / 1024 / 1024 / 8。得到时间段中使用的了流量、
- # 这里的$InternetTx是拉取到的发送流量数据,数据为一维数组 (时间戳 => 流量速率数据 )
- ksort($InternetTX);
- $thisTimeFlow = 0;
- # 梯形算法
- foreach( $InternetTX as $key=>$value ){
- $thisFlow = $value;
- if( empty($lastFlow) ) {
- $lastFlow = $thisFlow;
- continue;
- }
- $thisTimeFlow += ($thisFlow + $lastFlow) * 600 / 2;
- $lastFlow = $thisFlow;
- }
-
- # bt 转为MB
- $thisTimeFlow = round($thisTimeFlow/ (1024 * 1024 * 8), 2);
后面发现流量不太对,还是请教了阿里云这边的算法
根据 [InternetTX] 的数值,乘以1024再除以8,转换为Byte单位,然后再除以两个1024就是转换为 MB了,再将1小时内的流量加起来
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。