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 将使用用于执行请求的用户的时区显示时间,您可以通过以下方式查看用户时区:
- 前往 Softlayer 的门户网站
- 点击帐户菜单项->用户
- 点击您的用户
- 查看时区
我建议您首先显示所有数据,然后验证确定时区的数据是否相同,如果不同,您需要查看时区并进行更改,直到它们显示相同的数据
此致
我尝试使用 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 将使用用于执行请求的用户的时区显示时间,您可以通过以下方式查看用户时区:
- 前往 Softlayer 的门户网站
- 点击帐户菜单项->用户
- 点击您的用户
- 查看时区
我建议您首先显示所有数据,然后验证确定时区的数据是否相同,如果不同,您需要查看时区并进行更改,直到它们显示相同的数据
此致