SoftLayer API CPU 使用不匹配

SoftLayer API CPU usage mismatch

我尝试使用 PHP 客户端查询 API 在我们的一个虚拟服务器上的 CPU 使用情况:

$user = 'my_user';
$key = 'my_key';
$server = 24819101;

$client = \SoftLayer\SoapClient::getClient('SoftLayer_Virtual_Guest', $server, $user, $key);

$usage = $client->getCpuMetricDataByDate(date('Y-m-d H:i:s', strtotime('-2 HOUR')));

调用API没问题,其中一个结果是这样的:

array(
  'counter' => 2.096,
  'dateTime' => '2017-01-24T14:00:00+01:00',
  'type' => 'cpu0',
)

我读为 "the first CPU, at 2 PM today, was at about 2% load"。

但是,如果我从控制面板查看 CPU 图表,我发现今天下午 2 点 CPU 为 76.5%

两个值不应该相等吗?

首先,Softlayer 门户用于显示 CPU 使用情况的 API 方法不是 SoftLayer_Virtual_Guest:getCpuMetricDataByDate 此方法显示平均 CPU 使用情况,在另一个Softlayer 的门户显示最大 CPU 用法,它使用此方法:

http://sldn.softlayer.com/reference/services/SoftLayer_Metric_Tracking_Object/getSummaryData

这是一个使用 RESTful 的示例:

POST https://$USER:$APIKEY@api.softlayer.com/rest/v3.1/SoftLayer_Metric_Tracking_Object/$METIRCID/getSummaryData

PAYLOAD:

{
  "parameters": [
    "2017-01-24T00:00:00-00:00",
    "2017-01-25T00:00:00-00:00",
    [
      {
        "keyName": "CPU0",
        "summaryType": "max"
      }
    ],
    600
  ]
}

使用PHP会是这样的:

$metricID = 11111;
$client = \SoftLayer\SoapClient::getClient('SoftLayer_Metric_Tracking_Object', $metricID, $user, $key);

$types = array();
$type = new stdClass();
$type -> keyName = "CPU0";
$type -> summaryType= "max";
$types[] =  $type

$usage = $client->getCpuMetricDataByDate("2017-01-24T00:00:00-00:00", "2017-01-25T00:00:00-00:00",$types,600);

所以你需要获取metricID,你可以使用这个方法:

http://sldn.softlayer.com/reference/services/SoftLayer_Virtual_Guest/getMetricTrackingObjectId

这里是一个使用 RESTFUl 的例子:

GET https://api.softlayer.com/rest/v3.1/SoftLayer_Virtual_Guest/$VirtualGuestId/getMetricTrackingObjectId

另一点需要指出的是时间,您需要确保门户和您的代码使用相同的时区,否则您将在门户和 API 中看到相同时间的不同数据。 API 将使用用于执行请求的用户的时区显示时间,您可以通过以下方式查看用户时区:

  1. 前往 Softlayer 的门户网站
  2. 点击帐户菜单项->用户
  3. 点击您的用户
  4. 查看时区

我建议您首先显示所有数据,然后验证确定时区的数据是否相同,如果不同,您需要查看时区并进行更改,直到它们显示相同的数据

此致