为什么Virtual_Guest.getBillingCycleBandwidthUsage结果的结果与softlayer页面中显示的结果不同

时间:2018-01-03 08:05:24

标签: ibm-cloud-infrastructure

我正在尝试使用Softlayer API来检索设备带宽使用情况,根据Softlayer API https://sldn.softlayer.com/reference/services/SoftLayer_Virtual_Guest我认为函数getBillingCycleBandwidthUsage或getCurrentBandwidthSummary shoule有效。 但是在执行了这样的功能之后,我发现返回结果与我在control.softlayer.com的“bandwitdth summary”页面上看到的结果不一样。那么有人可以帮忙看一下吗?

1 个答案:

答案 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,与下图相同。

International System of Units

要获得总计,您需要将IN和OUT值相加。