按实例ID获取EC2带宽使用情况

时间:2017-01-24 13:03:08

标签: php amazon-web-services amazon-ec2 amazon-cloudwatch

如何使用PHP SDK根据实例ID获取EC2实例的NetworkIn和NetworkOut的实例带宽使用情况。

到目前为止我所拥有的是......

<?php
require_once("../aws/Sdk.php");

use Aws\CloudWatch\CloudWatchClient;

$client = CloudWatchClient::factory(array(
    'profile' => 'default',
    'region'  => 'ap-southeast-2'
));

$dimensions = array(
    array('Name' => 'Prefix', 'Value' => ""),
);

$result = $client->getMetricStatistics(array(
    'Namespace'  => 'AWSSDKPHP',
    'MetricName' => 'NetworkIn',
    'Dimensions' => $dimensions,
    'StartTime'  => strtotime('-1 hour'),
    'EndTime'    => strtotime('now'),
    'Period'     => 3000,
    'Statistics' => array('Maximum', 'Minimum'),
));

我每小时运行一次PHP cron作业,我需要能够获取特定EC2实例的带宽,以便在内部数据库中记录。

我上面的内容我已经能够从SDK文档中拼凑出来但是从这里我有点难过。

我相信我需要的是云观察,所以我希望能够通过这个来完成。我知道我可以在每台服务器上安装一个小程序来报告服务器上的文件的带宽使用情况,然后我将SFTP下载到我们的数据库,但是它宁愿在实例本身的任何设置外部完成,这样就可以了实例管理员不会导致带宽报告出现问题。

2 个答案:

答案 0 :(得分:0)

管理以使其与...一起工作

<?php
require '../../aws.phar';
use Aws\CloudWatch\CloudWatchClient;

$cw = CloudWatchClient::factory(array(
    'key' => 'your-key-here',
    'secret' => 'your-secret-here',
    'region' => 'your-region-here',
    'version' => 'latest'
));

$metrics = $cw->listMetrics(array('Namespace' => 'AWS/EC2'));

//print_r($metrics);

$statsyo = $cw->getMetricStatistics(array(
    'Namespace'     => 'AWS/EC2',
    'MetricName'    => 'NetworkIn',
    'Dimensions'    => array(array('Name' => 'InstanceId', 'Value' => 'your-instance-id-here')),
    'StartTime'     => strtotime("2017-01-23 00:00:00"),
    'EndTime'       => strtotime("2017-01-23 23:59:59"),
    'Period'        => 86400,
    'Statistics'    => array('Average'),
    'Unit'          => 'Bytes'
));

echo($statsyo);

答案 1 :(得分:0)

如果您尝试以与AWS相同的方式计算带宽费用,则使用VPC流日志的更好和更具决定性的方法。您可以订阅您的ENI到VPC流日志(应该非常便宜,他们只收取CloudWatch Logs成本,流日志是免费的)然后使用AWS SDK从CloudWatch获取GetLogEvents,然后总结字节总数。