2017-01-24 5 views
0

Как получить использование пропускной способности экземпляра для NetworkIn и NetworkOut для экземпляра EC2 на основе идентификатора экземпляра с помощью PHP SDK.Получить использование полосы пропускания EC2 по идентификатору экземпляра

Пока что я это ...

<?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 хрон работает каждый час, и мне нужно, чтобы иметь возможность получить пропускную способность в и для конкретного экземпляра EC2 для записи в внутренняя база данных.

То, что у меня было выше, я смог скомпоновать из документации SDK, но отсюда я немного запятнал.

Я верю в то, что мне нужно, это облачный путь, поэтому, скорее, это можно сделать через это. Я знаю, что я могу установить небольшую программу на каждый сервер, чтобы сообщить об использовании полосы пропускания в файл на сервере, который затем SFTP загрузится в нашу базу данных, но скорее сделаем это из-за каких-либо параметров внутри самого экземпляра, администратор экземпляра не может вызывать проблемы с отчетами о пропускной способности.

ответ

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); 
0

Если вы пытаетесь рассчитать пропускной способности канала зарядки так же, как AWS бы, лучше и более убедительным способом было бы использовать VPC Flow Logs. Вы можете подписаться на свои журналы ENI на VPC (должно быть довольно дешево, они оплачивают только расходы на CloudWatch Logs, журналы потоков бесплатны), затем используйте AWS SDK, чтобы вытащить из CloudWatch с GetLogEvents, а затем суммировать общее количество байтов.

+0

Вы имеете в виду, что статистика CloudWatch NetworkIn и NetworkOut неточна? –

+0

CloudWatch NetworkIn и NetworkOut будут включать в себя некоторые категории передачи данных, которые не оплачиваются или не учитываются. Это было описано на этой странице, но я не могу найти его сейчас: https://aws.amazon.com/ec2/pricing/on-demand/ в разделе «передача данных». Такие категории, как лицензирование Windows, DNS и т. Д. Не должны иметь большого влияния на номера передачи данных, которые вы извлекаете из CloudWatch –