我正在尝试使用Softlayer API来检索设备带宽使用情况,根据Softlayer API https://sldn.softlayer.com/reference/services/SoftLayer_Virtual_Guest我认为函数getBillingCycleBandwidthUsage或getCurrentBandwidthSummary shoule有效。 但是在执行了这样的功能之后,我发现返回结果与我在control.softlayer.com的“bandwitdth summary”页面上看到的结果不一样。那么有人可以帮忙看一下吗?
答案 0 :(得分:0)
要检索与控制门户网站页面相同的值,您需要使用服务SoftLayer_Metric_Tracking_Object::getSummaryData。
虚拟访客详细信息页面中的https://control.softlayer.com/network/bandwidth/summary和带宽标签调用该服务。
检索 metricTrackingObject.id 值,您可以使用以下方法:
使用带有掩码的 SoftLayer_Account :: getVirtualGuests 方法获取所有虚拟客人的 metricTrackingObject.id
https://api.softlayer.com/rest/v3/SoftLayer_Account/getVirtualGuests?objectMask=mask[id,fullyQualifiedDomainName,metricTrackingObject.id]
对于特定设备,请使用 SoftLayer_Virtual_Guest :: getObject 方法,如下所示:
https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/[guestID]/getObject?objectMask=mask[id,fullyQualifiedDomainName,metricTrackingObject.id]
在这两种情况下,响应都是这样的:
{
"fullyQualifiedDomainName": "guest01.example.com",
"id": 111111111,
"metricTrackingObject": {
"id": 25815935
}
}
或者您也可以使用方法 SoftLayer_Virtual_Guest :: getMetricTrackingObjectId
https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/[guestID]/getMetricTrackingObjectId
在我的情况下,metricTrackingObject.id为 25815935 ,此值用于底部示例(第三步)。
您需要知道结算周期的日期范围。调用 SoftLayer_Account :: getBillingInfo 方法
时,请检查 anniversaryDayOfMonth 值https://api.softlayer.com/rest/v3/SoftLayer_Account/getBillingInfo
在我的情况下, anniversaryDayOfMonth 为4,这意味着我的结算周期是从下个月的第4天到第3天,此范围适用于所有月份。
最后调用 SoftLayer_Metric_Tracking_Object :: getSummaryData ,如下所示:
https://api.softlayer.com/rest/v3/SoftLayer_Metric_Tracking_Object/25815935/getSummaryData
Method: POST
{
"parameters": [
"2017-12-04T00:00:00-0600",
"2018-01-03T23:59:59-0600",
[
{
"keyName": "PUBLICIN",
"name": "PUBLICin",
"summaryType": "sum"
},
{
"keyName": "PUBLICOUT",
"name": "PUBLICout",
"summaryType": "sum"
}
],
43200
]
}
如上所示,日期范围是从下一个月的第4天到第3天,数组中的参数是您要检索的validTypes值,值43200是summaryPeriod,请参阅{{3 }}
响应是这样的:
[
{
"counter": 32195987,
"dateTime": "2017-12-04T08:00:00-04:00",
"type": "publicIn_net_octet"
},
{
"counter": 3908213,
"dateTime": "2017-12-04T08:00:00-04:00",
"type": "publicOut_net_octet"
},
{
"counter": 43489761,
"dateTime": "2017-12-04T20:00:00-04:00",
"type": "publicIn_net_octet"
},
{
"counter": 14373554,
"dateTime": "2017-12-04T20:00:00-04:00",
"type": "publicOut_net_octet"
},
]
通过语言编程,您必须将所有 publicIn_net_octet 的计数器值相加,以获得带宽IN 和计数器 publicOut_net_octet 以获得带宽OUT
在我的情况下,带宽IN 为66158912635字节,使用SoftLayer_Metric_Tracking_Object::getSummaryData将其转换为GB,值为66.158912635 GB。
舍入值应为66.16 GB,与下图相同。
要获得总计,您需要将IN和OUT值相加。